Mat*_*t H 5 unit-testing mocking
我知道这个问题是一场宗教战争的一部分,但我有以下情况:我有一个对象,Responder它在对象上调用一个方法Updater来响应不同的事件.我最近以这种方式分离了测试:Updater方法本身的基于状态的测试,以及Responder调用它的基于行为的测试.也就是说,我Updater在Responder测试中嘲笑,只是为了确保它被调用.
我是否还应该测试应该在Updater测试中更新的对象的状态而不是嘲笑Responder?我喜欢我所做的,因为它需要较少的设置,似乎更好地隔离测试.但是,这似乎与执行和预期的行为联系Updater起来Responder.那太脆了吗?这是一个简化的例子.
Grz*_*nio 10
如果我确实理解了你的问题,你至少需要两个级别的测试:
单元测试,您尝试仅测试一个类并模拟所有依赖项(因此在您的情况下,需要在此处模拟Updater).这些测试可以帮助您开发代码(特别是如果您使用的是TDD),请确保该类的行为符合设计,甚至可以记录此类的行为方式.几乎每个班级都应该进行单元测试.但是,正如您所注意到的,即使您拥有100%的测试覆盖率,也无法保证您的程序能够正常运行甚至启动!
验收,集成和端到端测试 - 这些测试涵盖整个应用程序或大型模块,并测试所有内容是否一致.通常,您不在此级别使用模拟(您可能会存根整个模块/ Web服务,具体取决于上下文).这些测试不必测试每个实现细节(也不应该),因为这是通过单元测试完成的.他们确保一切都正确连线并一起工作.在你的情况下,你不会在这里模拟Updater.
总而言之,我认为你真的需要做两件事来正确测试你的应用程序.