【发布时间】:2015-03-16 23:37:02
【问题描述】:
如果创建一个包含静态方法签名的接口,我将有办法测试依赖于这些静态方法的类。
但是我将如何测试实现接口并包装这些静态方法的具体包装类?
我只是不测试具体的包装类吗?
似乎包装静态方法只是将问题转移到其他地方。我还有一些类,包装类,很难测试。
【问题讨论】:
标签: unit-testing dependency-injection inversion-of-control wrapper
如果创建一个包含静态方法签名的接口,我将有办法测试依赖于这些静态方法的类。
但是我将如何测试实现接口并包装这些静态方法的具体包装类?
我只是不测试具体的包装类吗?
似乎包装静态方法只是将问题转移到其他地方。我还有一些类,包装类,很难测试。
【问题讨论】:
标签: unit-testing dependency-injection inversion-of-control wrapper
您在正确的轨道上,但您没有将问题转移到其他地方 - 您正在隔离它以防止该问题在您的代码库和其他测试中泄漏。如果您对包装行为做出错误的假设或忽略证明这些假设,我只会将其视为一个问题。需要进行一些测试,但难度不同。您选择在多大程度上测试这些假设将是您需要做出的权衡。
在某些情况下,可以测试包装器,但需要您可以控制的物理依赖关系。例如,修改文件的静态方法将需要您花时间设置文件系统,或从 Web 服务器下载文件的帮助程序类。我喜欢将这些测试视为“集成测试”而不是“单元测试”,因为它们会根据它们的依赖关系而不是孤立地运行。由于这些测试可能需要更长的时间来执行标准测试,因此您可能希望排除它们并减少运行它们的频率,而不是更快的单元测试。
对于其他情况,您可能无法在不付出大量努力的情况下编写测试。例如,您可能已经将显示对话框的逻辑封装在单独的窗口中——在代码中测试此逻辑将是很多工作,但启动应用程序并验证它是否有效可能就足够了。你会在代码覆盖率方面受到影响,但对我来说这是一个可以接受的权衡。
关键的挑战是理解包装行为的假设——例如,如果 web 请求格式错误或网络连接丢失,远程服务器会抛出什么类型的异常?如果您没有正确捕捉这些假设,这些错误就会冒泡到代码的其他区域。
【讨论】: