我在我的项目中使用了更多的单元测试并阅读了我可以在线获取的所有信息,并且很多术语让我感到困惑。因此,我可能在对话和谷歌搜索中错误地使用这些术语。
有人可以概述所有单元测试术语,如“假”类型以及测试类型(交互与集成)吗?
答案 0 :(得分:49)
当涉及到模拟与假货与存根时,实际上有几种不同的方式可以解释它们。我通常借the meanings defined by Martin Fowler:
交互测试是一个通用术语,指的是确保对象之间的交互是正确的单元测试(确保调用预期的方法)。这与状态(或经典)测试相反,它不关心方法中发生的情况,只要结果状态是正确的。这些类型的测试在我上面链接的Fowler文章中进行了比较。
Integration testing实际上不是单元测试的一个方面,它高于单元测试。它需要不同的单位并验证它们是否正确协同工作。
答案 1 :(得分:12)
来自MSN杂志的article解释了这些术语,并通过示例和一些源代码详细介绍了这些术语。
基本上这些是测试双打:
答案 2 :(得分:6)
Fowler当然在区分Mocks and Stubs方面做得非常出色,但对我来说,XUnit Test Patterns本书是参考资料,我建议您查看Mocks, Fakes, Stubs and Dummies进行全面比较。< / p>
是的,我知道,这很令人困惑,这也是我建议检查Mocks and Stubs aren't Spies,然后let’s spy以及最后Mockito - The New Mock Framework on the Block的原因。
关于不同类型的测试,可以简化解释(这不是详尽的列表):
所有这些类型都是有用的而不是排他性的,它们实际上并没有相同的意图。
答案 3 :(得分:4)
这是一本很好的书:http://xunitpatterns.com/
请参阅:http://xunitpatterns.com/Mocks,%20Fakes,%20Stubs%20and%20Dummies.html
和http://xunitpatterns.com/XUnit%20Terminology%20Crossreference.html
答案 4 :(得分:4)
我已经读过(并衷心推荐)Roy Osherove的The Art of Unit Testing。他使用了一套简化的术语。
用他的书来解释......
集成测试 - 到达当前流程或对象之外的任何测试以与其他内容进行交互
交互测试 - 对对象协同工作方式的测试
状态测试 - 对操作产生的结果进行测试
假 - 使用任何替代真实物品的替身物品
存根 - 提供受测试代码所需的依赖关系的替代对象
模拟 - 用于检查测试结果的替身
请注意,这里Stubs和Mocks都可以通过Mocking框架提供 - 这种干扰与它们如何被用作所使用的技术一样多。