【发布时间】:2010-07-16 12:39:35
【问题描述】:
我有一个稍微复杂的方法,需要经过很好的测试。秘制酱料。好吧,也许不是那么酷,但我不是 100% 确定如何设置这些东西。这种源于我之前的问题here。我没有使用过 rhino 模拟,所以我仍然很糟糕/不知道语法,所以请随时提出大量建议。
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 等,则将它们放入消息中。我认为我的问题是我每次都需要返回不同的对象(某些项目)......?
【问题讨论】:
-
您能说明一下您要达到的目标吗?并且可能至少粘贴处理消息的代码大纲?
-
消息是最终结果,因此它不如获取数据以正确构建这些重要(这是一种过滤方法)。传达信息很容易,但获得正确的东西来传达信息却并非如此。我需要不同的对象来返回每个 GetThings,因为它们会被过滤掉(这是预期的)......我开始怀疑我是否需要根据输入单独返回每个对象(30,60 等等)跨度>
-
当您存根/模拟一个方法时,您指定返回指定值的参数。你不能只定义一些存根吗?如果您希望有人帮助您,您确实需要粘贴一些简化的代码。
-
哈,这就是简化代码!是的,似乎我必须根据给定的输入将每一个都作为一个单一的回报。否则我必须创建一个完整的 ISomeService ,这样它就不会是一个纯粹的单元测试。
标签: unit-testing vba rhino-mocks mocking