使用单个假冒作为模拟和存根

时间:2015-09-20 18:50:55

标签: unit-testing mocking rhino-mocks stubbing stubs

我对单元测试非常熟悉,并且了解模拟和存根之间的区别。 Roy Osherove最简单的解释是,所有的假货都是以存根为​​起点,直到你断言它们为止,然后才是嘲笑。

再一次,我得到了所有这一切。我的问题是“将一个假实例用作模拟和存根是错误的吗?从Rhino Mocks文档中获取以下示例(http://ayende.com/wiki/Rhino+Mocks+3.5.ashx

public void When_user_forgot_password_should_save_user()
{
  var mockUserRepository = MockRepository.GenerateMock<IUserRepository>();
  var stubbedSmsSender = MockRepository.GenerateStub<ISmsSender>();

  var theUser = new User{HashedPassword = "this is not hashed password"};    

  mockUserRepository.Stub(x => x.GetUserByName("ayende")).Return(theUser);

  mockUserRepository.Expect( x => x.Save(theUser) );

  var controllerUnderTest = new LoginController(mockUserRepository, stubbedSmsSender);

  controllerUnderTest.ForgotMyPassword("ayende");

  mockUserRepository.VerifyAllExpectations();
}

您会注意到mockUserRepository以mock一词命名,并且正在调用GenerateMock工厂,因为在代码中,mockUserRepository具有为其建立的行为期望,并最终验证了行为的期望。很棒,但是一直到mockUserRepository都在调用它的Stub()方法,以“通过”调用同一对象上的GetUserByName()返回的数据。

显然,此示例显示使用显式命名和声明的mock作为mock和stub。回到Roy Osherove的定义,所有假货都是存根,直到你断言它们为止,我被迫相信使用假货作为模拟和存根(虽然肯定有效)是不好的做法。

有人知道这样做是否有判决?

0 个答案:

没有答案