关于单元测试和rhino模拟的一些问题

本文关键字:问题 模拟 rhino 单元测试 | 更新日期: 2023-09-27 18:15:35

我是一个编写单元测试的新手,所以我边走边学习。我正在使用Rhino mock与MsTest框架,并有一些问题。

我在哪里可以找到一些关于rhino模型的文档,概述其功能和解释,以便我可以打印和检查?

我看过很多关于期望的以下两种技巧的例子,哪一种更适合于特定的情况?

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

var mockTestClass = MockRepository.GenerateMock<TestClass>();
mockTestClass.Expect( m => m.MethodToMock(param) ).Return( true );

接下来我想知道存根和模拟类之间的区别是什么,应该在哪些场景中使用什么?

谢谢你的帮助

关于单元测试和rhino模拟的一些问题

我在哪里可以找到一些关于rhino模型的文档,概述其功能和解释,以便我可以打印和检查?

Rhino Mocks文档在这里,一个很好的wiki在这里。一般来说,要小心任何提到3.3或更低版本的内容,因为它会有些过时。

对于特定情况哪个更好或更合适?

第二种方式更"流畅",值得推荐。

存根和mock有什么区别

这里有一些关于这个的资源:

  • 模拟和模拟的区别是什么?存根吗?
  • http://en.wikipedia.org/wiki/Mock_object Mocks.2C_fakes_and_stubs
  • http://codebetter.com/jameskovacs/2009/02/10/mocks-vs-stubs/
  • http://martinfowler.com/articles/mocksArentStubs.html
如果你刚刚开始使用这些概念,我认为你最好使用NUnit和Moq。

如果你想检查特定的方法被调用和返回值并不重要,我建议使用AAA语法和AssertWasCalled()方法:

// 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框架透视图来看,存根和mock之间的区别如下:

  • 期望可以为mock和存根设置,但它们只对mock进行验证,例如,您不能为存根
  • 指定Repeat().Any()
  • Stub在访问方法或属性时不会失败,对于给定的返回类型T,所有的属性和方法都返回default(T), Stub的属性为正常属性

关于mock和stub之间差异的更多细节,请参阅Mauricio的回答中提供的一组很好的链接,我建议Martin Fowler的工作。