关于单元测试和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 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
如果你想检查特定的方法被调用和返回值并不重要,我建议使用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进行验证,例如,您不能为存根 指定
- Stub在访问方法或属性时不会失败,对于给定的返回类型
T
,所有的属性和方法都返回default(T)
, Stub的属性为正常属性
Repeat().Any()
等关于mock和stub之间差异的更多细节,请参阅Mauricio的回答中提供的一组很好的链接,我建议Martin Fowler的工作。