Sam*_*Sam 5 c# unit-testing rhino-mocks mocking stubbing
我需要开发一个相当简单的算法,但我很困惑如何最好地为它编写测试.
一般说明:用户需要能够删除计划.计划具有与之关联的任务,这些也需要删除(只要它们尚未完成).
伪代码算法应该如何表现:
PlanController.DeletePlan(plan)
=>
PlanDbRepository.DeletePlan()
ForEach Task t in plan.Tasks
If t.Status = Status.Open Then
TaskDbRepository.DeleteTask(t)
End If
End ForEach
Run Code Online (Sandbox Code Playgroud)
现在据我所知,单元测试不应该触及数据库,或者通常需要访问任何外部系统,所以我猜我有两个选择:
1)模拟Repository调用,并检查它们是否被称为Asserts的适当次数
2)为两个存储库类创建存根,手动设置其删除标志,然后验证是否已将相应的对象标记为删除.
在这两种方法中,最大的问题是:我到底在测试什么?这些测试给我的EXTRA值是多少?
对此的任何见解都将受到高度赞赏.虽然我们使用了RhinoMocks,但这在技术上并没有与任何特定的单元测试框架相关联.但是我更喜欢一般性的解释,这样我才能正确地解决这个问题.
您应该模拟存储库,然后在包含开放任务和封闭任务的单元测试中构建一个虚拟计划。然后调用传递此计划的实际方法,并最后验证是否DeleteTask使用正确的参数调用了该方法(仅状态 = 打开的任务)。这样您就可以确保您的方法仅删除与该计划关联的未完成任务。另外,不要忘记(可能在单独的单元测试中)通过断言DeletePlan已在您传递的对象上调用该方法来验证计划本身是否已被删除。
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |