我需要开发一个相当简单的算法,但我有点困惑如何最好地为它编写测试。
一般描述:用户需要能够删除计划。计划有与之关联的任务,这些也需要删除(只要它们尚未完成)。
伪代码作为算法的行为方式:
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 可以使用。但我更喜欢一般性的解释,这样我就可以正确地解决这个问题。