【发布时间】:2010-12-22 05:53:29
【问题描述】:
我在我的项目中使用了更多的单元测试,并阅读了我可以在线阅读的所有信息,并且对很多术语感到困惑。因此,我可能在对话和谷歌搜索中错误地使用了这些术语。
有人可以概述所有单元测试术语,例如“假”类型以及测试类型(交互与集成)吗?
【问题讨论】:
标签: unit-testing mocking
我在我的项目中使用了更多的单元测试,并阅读了我可以在线阅读的所有信息,并且对很多术语感到困惑。因此,我可能在对话和谷歌搜索中错误地使用了这些术语。
有人可以概述所有单元测试术语,例如“假”类型以及测试类型(交互与集成)吗?
【问题讨论】:
标签: unit-testing mocking
来自 MSN 杂志的 article 解释了这些术语,并通过示例和一些源代码进行了一些详细说明。
基本上这些是测试替身:
【讨论】:
我已阅读(并衷心推荐)Roy Osherove 的 The Art of Unit Testing。他使用了一套简化的术语。
套用他的书...
集成测试 - 任何超出当前进程或对象以与其他对象交互的测试
交互测试 - 测试对象协同工作的方式
状态测试 - 对操作产生的结果进行测试
赝品 - 任何代替真实物品的替代品
存根 - 一个替代对象,提供被测代码所需的依赖项
Mock - 用于检查测试结果的替身
请注意,这里的 Stub 和 Mocks 都可以由 Mocking 框架提供 - 区别在于它们的使用方式与所使用的技术一样。
【讨论】:
Fowler 在区分 Mocks and Stubs 方面当然做得很好,但对我来说,XUnit Test Patterns 这本书是参考,我建议查看 Mocks, Fakes, Stubs and Dummies 进行全面比较。
是的,我知道,这很令人困惑,这就是为什么我建议检查Mocks and Stubs aren't Spies,然后检查let’s spy,最后检查Mockito - The New Mock Framework on the Block。
关于不同类型的测试,一个简单的解释可能是(这不是一个详尽的列表):
所有这些类型都是有用的而不是排他的,它们实际上只是没有相同的意图。
【讨论】:
当谈到 mock 与 fake 与 stub 时,人们实际上有几种不同的解释方式。我一般借the meanings defined by Martin Fowler:
交互测试是一个通用术语,指的是确保对象之间的交互正确(确保调用预期的方法)的单元测试。这与状态(或经典)测试相反,它不关心方法中发生了什么,只要结果状态是正确的。我在上面链接的 Fowler 的文章中对这些类型的测试进行了比较。
Integration testing 真的不是单元测试的一个方面,它是单元测试之上的一个层次。它需要不同的单元并验证它们是否可以正确地协同工作。
【讨论】: