Joh*_*ell 35 unit-testing mocking
我在我的项目中使用了更多的单元测试并阅读了我可以在线获取的所有信息,并且很多术语让我感到困惑.因此,我可能在对话和谷歌搜索中错误地使用这些术语.
有人可以概述所有单元测试术语,如"假"类型以及测试类型(交互与集成)?
Kal*_*see 50
当涉及到模拟与假货与存根时,实际上有几种不同的方式可以解释它们.我通常借用Martin Fowler定义的含义:
交互测试是一个通用术语,指的是确保对象之间的交互是正确的单元测试(确保调用预期的方法).这与状态(或经典)测试相反,它不关心方法中发生的情况,只要结果状态是正确的.在我上面链接的福勒的文章中比较了这些类型的测试.
集成测试确实不是单元测试的一个方面,它高于单元测试.它需要不同的单位并验证它们是否正确协同工作.
Fowler当然在区分Mocks和Stubs方面做得非常出色,但对我来说,XUnit Test Patterns一书是参考资料,我建议检查Mocks,Fakes,Stubs和Dummies进行全面比较.
是的,我知道,这是令人困惑的,这就是为什么我建议检查Mocks和Stubs不是间谍,然后让间谍,最后是Mockito - 块上的新模拟框架.
关于不同类型的测试,可以简化解释(这不是详尽的列表):
所有这些类型都是有用的而不是唯一的,它们实际上只是没有相同的意图.
我已经阅读(并衷心推荐)Roy Osherove 的The Art of Unit Testing。他使用了一套简化的术语。
转述他的书...
集成测试- 到达当前流程或对象之外以与其他事物交互的任何测试
交互测试- 对对象协同工作方式的测试
状态测试- 对操作产生的结果的测试
假的- 任何用来代替真实事物的替代物
Stub - 一个替代对象,提供被测代码所需的依赖项
Mock - 用于检查测试结果的替代品
请注意,这里的 Stubs 和 Mocks 都可以由 Mocking 框架提供 - 区别在于它们的使用方式和所使用的技术一样。