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

C# 关于单元测试和rhino模拟的一些问题,c#,unit-testing,tdd,mocking,rhino-mocks,C#,Unit Testing,Tdd,Mocking,Rhino Mocks,我不熟悉编写单元测试,所以我会边写边学。我在MsTest框架中使用Rhino Mock,有一些问题 我在哪里可以找到一些关于rhino Mock的文档,这些文档概述了rhino Mock的特性并给出了解释,这样我就可以打印并检查它了 我已经看到了许多关于期望的以下两种技巧的例子,哪一种更好或更适合于特定情况 Expect.Call( delegate { mockTestClass.MethodToMock(param) } ).Return(true); 或 var mockTestClas

我不熟悉编写单元测试,所以我会边写边学。我在MsTest框架中使用Rhino Mock,有一些问题

我在哪里可以找到一些关于rhino Mock的文档,这些文档概述了rhino Mock的特性并给出了解释,这样我就可以打印并检查它了

我已经看到了许多关于期望的以下两种技巧的例子,哪一种更好或更适合于特定情况

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

var mockTestClass=MockRepository.GenerateMock();
Expect(m=>m.MethodToMock(param)).Return(true);
接下来,我想知道stubing和mock类之间的区别是什么,在哪些场景中应该使用什么

谢谢你的帮助

我在哪里可以找到一些关于rhino Mock的文档,这些文档概述了rhino Mock的特性并给出了解释,这样我就可以打印并检查它了

Rhino Mocks文档和一个好的wiki都是。一般来说,在提到3.3或更低版本时要小心,因为它会有些过时

哪一个更好或更适合特定情况

Expect.Call( delegate { mockTestClass.MethodToMock(param) } ).Return(true);
第二种方式更“流畅”,推荐使用

存根和嘲笑有什么区别

以下是关于这方面的一些资源:


顺便说一句,如果你刚刚开始使用这些概念,我认为你最好使用NUnit和Moq。示例。

如果要检查是否调用了特定的方法,并且返回值无关紧要,我建议使用and
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());
//排列
var mock=MockRepository.GenerateMock();
var服务=新的MyService(mock);
//表演
服务。DoSomething();
//断言
//确保调用了mock的某个方法
//调用service.DoSomething()时
调用mock.assertwas(m=>m.SomeMethod());
RhinoMocks框架透视图中存根和模拟的区别如下:

  • 可以为mock和stub设置期望值,但它们仅针对mock进行验证,例如,您不能为stub指定
    Repeat().Any()
    等等
  • 当访问方法或属性时,存根从不失败,所有属性和方法返回
    default(T)
    对于给定的返回类型
    T
    ,存根的属性是普通属性

有关模拟和存根之间差异的更多详细信息,请参见毛里西奥的回答中提供的一组链接,我建议您使用马丁·福勒的作品。

+1-希望您不介意我在您的回答中添加了另一个Rhino链接非常感谢您的反馈。我能问一下你为什么建议“我认为你最好使用NUnit和Moq”@业余爱好者:NUnit更简单,你会发现很多信息,Moq比Rhino更新。模拟和更好的维护/记录。这是一本学习单元测试的好书——这是我开始学习的。它也会用到mock和stub。