我需要开发一个相当简单的算法,但是对于如何编写最佳测试有点困惑。
一般描述:用户需要能够删除计划。计划有与之关联的任务,这些任务也需要被删除(只要它们还没有完成)。
伪代码描述算法的行为:
PlanController.DeletePlan(plan)
=>
PlanDbRepository.DeletePlan()
ForEach Task t in plan.Tasks
If t.Status = Status.Open Then
TaskDbRepository.DeleteTask(t)
End If
End ForEach
据我所知,单元测试不应该触及数据库或需要访问任何外部系统,因此我想这里有两个选项:
1)模拟存储库调用,并检查它们被调用的次数是否正确。
2)为两个存储库类创建存根,手动设置其删除标志,然后验证已标记要删除的适当对象。
在这两种方法中,一个重要问题是:我到底在测试什么?这些测试给我带来了哪些额外价值?
非常感谢您的任何见解。这与任何特定的单元测试框架没有技术联系,尽管我们可以使用RhinoMocks,但我更喜欢一般性的解释,以便我能够正确地理解这个问题。