测试混凝土包装 类

Test Concrete Wrapper Classes

如果创建了一个包含静态方法签名的接口,我将有办法测试依赖于这些静态方法的 classes。

但是我将如何测试实现接口并包装那些静态方法的具体包装器 class?

我只是不测试混凝土包装纸吗class?

包装静态方法似乎只是将问题转移到了别处。我还有一些 class,包装器 class,很难测试。

您走在正确的轨道上,但您并没有将问题转移到其他地方——您正在隔离它以防止该问题在您的代码库和其他测试中泄漏。如果您对包装行为做出了错误的假设或忽略了证明这些假设,我只会将其视为一个问题。需要进行一些测试,但难度不同。您选择在多大程度上检验这些假设将是您需要做出的权衡。

对于某些情况,可以测试包装器,但需要您可以控制的物理依赖性。例如,修改文件的静态方法需要您花时间设置文件系统,或者需要从 Web 服务器下载文件的助手 class。我喜欢将这些测试视为 "integration tests" 而不是 "unit tests",因为它们作用于它们的依赖关系而不是孤立地 运行ning。由于这些测试可能需要更长的时间来执行标准测试,因此您可能希望将它们排除在外,并且 运行 它们的频率低于更快的单元测试。

对于其他场景,您可能不费吹灰之力就写不出测试。例如,您可能已将显示对话框的逻辑包装在单独的 window 中——在代码中测试此逻辑需要大量工作,但启动应用程序并验证其是否正常工作可能就足够了。你会在代码覆盖率上受到打击,但对我来说这是一个可以接受的权衡。

关键的挑战是理解包装行为的假设——例如,如果网络请求格式错误或网络连接丢失,远程服务器会抛出什么类型的异常?如果您没有正确捕捉这些假设,这些错误会冒泡到代码的其他区域。