我的班级有依赖,我在单元测试中嘲笑.我在一个对我来说没什么意义的地方得到了一个空引用异常.
我刚才意识到这是因为我没有设置我的模拟依赖.此依赖项已经过测试,但它不会连接到文件系统或数据源之类的任何内容.
我只想在这个新类中测试我的新代码,但我想在这种情况下最好不要模拟.
这个结论是否正确?
正确.你应该模仿依赖于任何持久性或外部性的东西,以防止测试依赖于任何持久性或外部性.
如果依赖性不依赖于任何持久性或外部性,那么通过模拟它获得的唯一好处是即使依赖性错误,测试也能正常工作 – 但这假设模拟正常工作.为此你需要:
>编写一个完全模拟依赖关系的模拟.
>编写一个模拟,模拟将在测试中使用的特定情况的依赖关系.
第一个选择是彻头彻尾的荒谬 – 为什么你的模拟比原来的依赖更好?毕竟,可以安全地假设在原始依赖项上投入了比在模拟中更多的努力……
第二个选项意味着您的mock知道实现的确切细节 – 否则您将不知道实现如何使用依赖项,因此您不知道如何模拟这些特定用途.这意味着测试不能用于单元测试的主要目的之一 – 在更改实现后验证代码是否正常工作.
模拟的缺点是太大而且优点太小 – 特别是考虑到你总是可以运行依赖项的测试来检查它是否正常工作……