我有一个类 API,它具有完整的代码覆盖率,并使用 DI 来模拟完成所有工作的主类函数 (Job.Run) 中的所有逻辑。
我在生产中发现了一个错误,我们没有对其中一个数据输入字段进行一些验证。
所以,我添加了一个名为 ValidateFoo() 的存根函数...针对这个函数编写了一个单元测试来期望 JobFailedException,运行测试 - 它显然失败了,因为该函数是空的。我添加了验证逻辑,现在测试通过了。
太好了,现在我们知道验证有效。问题是 - 我如何编写测试以确保在 Job.Run() 中实际调用了 ValidateFoo()?ValidateFoo() 是 Job 类的私有方法 - 所以它不是一个接口......
无论如何用 NMock2.0 做这个?我知道 TypeMock 支持非接口类型的假货。但是现在更改模拟库不是一种选择。在这一点上,如果 NMock 不能支持它,我只需将 ValidateFoo() 调用添加到 Run() 方法并手动测试 - 考虑到我的 Job.Run() 方法显然我不想这样做现在100%覆盖。有什么建议吗?非常感谢,非常感谢。
编辑:我想到的另一个选择是为我的 Job.Run 功能创建一个集成测试(向它注入复合对象的真正实现而不是模拟)。我将为该字段提供一个错误的输入值,然后验证作业是否失败。这有效并涵盖了我的测试 - 但它不是真正的单元测试,而是测试一个功能单元的集成测试......嗯......
EDIT2:有什么办法可以做到吗?有人有想法吗?也许 TypeMock - 或者更好的设计?