在罗伊Osherove的书[单元的测试][1]的书,他解释说,一个单元的测试应当包含0和1之间的嘲笑.他建议,如果你的测试并不是主张在模拟,然后不要使用模拟。他进一步说明如何使用隔离的框架产生的残余部分,这是创建同样的嘲笑.他没有建议的数量限制的残余部分的创建每测试。

我的问题是这个:可这些建议应适用于所有隔离框架(或所有受C#框架)?换句话说,是否有一个框架,可以产生仅嘲笑-不桩?有一个隔离框架,该框架没有区分嘲笑从桩?

我只是好奇多么容易Osherove的建议可以转变到编码的标准。

[1]: http://the 系统测试下甚至都不是正在测试,而不是返回的数据,从嘲笑为什么正在进行测试。

有帮助吗?

解决方案

有像Moq的框架,不区分它们。 FakeItEasy走得更远,并呼吁一切假的对象。

是,也可以应用,因为模拟的功能只是聪明存根。这不要紧,多如果存根被称为模拟只要你不断言一个以上的模拟。换句话说,建议更多的是断言每个测试只做一件事。明确区分嘲笑和存根不那么重要。

其他提示

直接这对应于Osherove的建议,即只执行每个测试一个断言。在他的词汇一个stub是提供假输入到被测系统的一类,而mock是一类,它允许你测试输出从被测系统(使用假类)。

无论是框架使用了类似的命名惯例,以它的设计师,但标准(如果他的建议同意)应为测试执行,只有一个断言,并在断言需要一个假冒的对象 - 只有一个假对象应每个测试进行测试。

当然,不是每个人都与他的建议表示同意,所以并不是每个人都能这样说。

菲利普Calçado最近写的: http://fragmental.tw/2010/12/14/one-mock-per-test-considered-not-awesome/ 。总之,他说,专注于有多少嘲笑/存根也有在测试转接你从什么应该是主要的关注:编写好的规格

> can those recommendations 
> [a single unit test should contain between 0 and 1 mocks] 
> be applied to all isolation frameworks ?

我认为:大多数时候 是的 如果你假设这些定义

  • 单元测试=Test在隔离(他人,这不是一个单元测试)
  • 一个单元测试用于一个特征
  • 一桩假的一个目的是允许隔离但没有验证功能和
  • 一个模型是根额外的功能,还允许验证

我用我的Moqfor嘲讽得到它这里

我不知道究竟你的意思“磕碰”,但我认为它可能像Moles from Microsoft这很酷。 这里

两者都非常有趣,非常容易使用。

这排的规则应该被看作是“培训轮子”。显然,测试,其中包括许多存根和嘲笑已经失去了情节,但坚持每测试一个断言或期望是太严格。由于引用Calçado链接指出,要紧的是,有一个的概念的每个测试,这可能涉及一些断言或期望的重点。你应该做的最后一件事是强制执行该标准。

还有一两件事,我们真的应该谈论“预期”在这里,个人的互动,而不是整个模拟对象。在实践中,他们经常是相同的,但它模糊的概念。

我用犀牛模拟为我在C#测试。您可以生成与它嘲笑或存根。我鼓励你有这个框架来看看: http://www.ayende.com/项目/鼻 - mocks.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top