模拟方法并返回不同的结果

时间:2010-07-16 12:39:36

标签: unit-testing vba rhino-mocks mocking

我的方法有点复杂,需要经过充分测试。秘密酱的东西。好吧,也许不是很酷,但我不是百分百肯定如何设置这些东西。这种情况源自我之前的问题here。我没有使用过犀牛嘲讽,所以我仍然不好/不知道语法,所以请随意提出大量的建议。

Public Function GenerateAllNotifications(ByVal days As List(Of Integer)) As List(Of MailMessage) Implements INotificationService.GenerateAllNotifications

     Dim someStuff = _someService.GetThingsThatExpireBetween(day1, day2)

     'build some messages

     Return messages

End Function

我的测试中的设置看起来像这样......我知道这是错误的

Dim fakeStuff = New SomeItem()

Dim fakeContext = New List(Of Provider)
fakeContext.Add(fakeStuff)
Dim someService = MockRepository.GenerateStub(Of ISomeService)()
someService.Stub(Function(x) x.GetThingsThatExpireBetween(30, 60)).IgnoreArguments().Return(fakeContext.AsQueryable)
_fakeNotificationService = New NotificationService(someService)

我想要完成的是从该服务中返回一个被执行的项目。业务规则是基于给定到期的消息集合。因此,如果给定实体在30天内到期,则该消息反映出,如果它是60,90,无论如何,这些都被放入消息中。我想我的问题是每次都需要让不同的对象回来(someitem)......?

1 个答案:

答案 0 :(得分:0)

好像你正试图让你的模拟行为正确。如果您认为您的模拟而不是为您所测试的类的行为提供上下文,那么它可能会有所帮助。

  • 鉴于我的模拟会以某种方式行事
  • 当我使用我的班级时
  • 然后我期待这个结果

然后你可以让你的模拟行为方式不同 - 无论参数如何 - 并检查你的类在这些不同的情况下是否表现得恰当。您将针对每个上下文进行新测试。我经常在上下文中的行为之后命名我的测试:

    如果没有找到任何东西,
  • 应该给我一个空列表
  • 应该处理并返回找到的东西
  • 如果服务引发异常,
  • 应该提供错误消息

等,只有驼峰式,并且[Test]归属。

这有帮助吗?如果没有,我可能误解了这个问题 - 道歉。