2011-11-24 89 views
3

我是新手写单元测试,所以随着我的学习一起学习。我正在用MsTest框架使用Rhino Mocks,并且有一些问题。关于单元测试和犀牛模拟的一些问题

我在哪里可以找到关于犀牛嘲讽的一些文档,概述了它的功能和解释,以便我可以打印和检查?

我已经看到了以下2种关于期望值的技巧的很多例子,对于特定的情况来说哪种更好或更适合?

Expect.Call(delegate { mockTestClass.MethodToMock(param) }).Return(true); 

var mockTestClass = MockRepository.GenerateMock<TestClass>(); 

mockTestClass.Expect(m => m.MethodToMock(param)).Return(true); 

接下来我想知道什么磕碰和嘲讽类之间的区别是什么,应当在方案中使用?

感谢您的任何帮助。

+0

[单元测试的艺术(http://www.amazon.co.uk/Art-Unit-Testing-Examples-NET/dp/1933988274)是一个非常好的书,学习单元测试 - 这是什么我开始。它也使用了模拟和存根。 –

回答

4

我在哪里可以找到关于犀牛嘲讽的一些文档,用解释概述了它的特征,这样我就可以打印出来并进行检查了?

犀牛嘲笑文档是here和一个很好的维基是here。一般来说,对任何提及版本3.3或更低版本的东西要小心,因为它会有点过时。

哪个更适合某种情况?

第二种方式更“流利”并被推荐。

什么磕碰和嘲讽

这里的区别是一些资源,这一点:

顺便说一句,如果你刚刚开始使用这些概念,我想你会更好地使用NUnit和Moq。 Here's an introduction附带示例。

+0

+1 - 希望你不介意我给你的回答添加了另一个Rhino链接 –

+0

非常感谢您的反馈。我可以问你为什么建议“我认为你会更适合使用NUnit和Moq”? – amateur

+0

@amateur:NUnit更简单,你会发现很多信息,Moq比Rhino.Mocks更新,更好的维护/记录。 –

0

如果要检查特定方法被调用和返回值没关系我会用AAA syntaxAssertWasCalled()方法建议:

// Arrange 
var mock = MockRepository.GenerateMock<ICustomType>(); 
var service = new MyService(mock); 

// Act 
service.DoSomething(); 

// Assert 
// ensures that SomeMethod of the mock was called 
// whilst service.DoSomething() call 
mock.AssertWasCalled(m => m.SomeMethod()); 

存根之间的差异,并从RhinoMocks框架的角度嘲笑有以下几点:

  • 期望能为双方嘲弄和存根进行设置,但他们的嘲笑只有通过验证的,比如你就不能指定Repeat().Any()等存根
  • 访问方法或属性时名
  • 存根永远不会失败,所有属性和方法对于给定的返回类型T回到default(T),存根的性质是正常的性能

更多细节有关嘲弄和存根之间的差异看到一套良好的链接在Mauricio的回答中提供,我会建议Martin Fowler的工作。