我对在规范测试中编写太多逻辑感到担忧。
所以我们假设我们student
有statuses
和steps
学生身份从
开始pending -> learning -> graduated -> completed
并且步骤是:
nil -> learning_step1 -> learning_step2 -> learning_step3 -> monitoring_step1 -> monitoring_step2
随着每一步的进行,很多事情都会发生,具体取决于你所处的位置:例如
nil -> learning_step1
学生状态更改为learning
写入操作历史记录(由报告统计信息使用)
更新联系计划
learning_step1 -> learning_step2
......同样......
等.....直到
learning_step3 -> monitoring_step1
学生状态更改为graduated
写入不同的行动历史(由报告统计使用)
更新联系计划
以及何时
monitoring_step2 -> there is no next step
学生状态更改为completed
写入不同的行动历史(由报告统计使用)
删除任何联系时间表
所以想象一下,我需要一个completed
学生的测试用例,我必须考虑可能出现的所有可能性并将该学生视为completed
而我也忘记写一个动作历史并且会弄乱报告。
或....
使用已经实现的类:
# assuming we have like in the above example 5 steps I do
StepManager.new(student).proceed # goes status learning and step1
StepManager.new(student).proceed
StepManager.new(student).proceed
StepManager.new(student).proceed # goes status graduated and monitoring1
StepManager.new(student).proceed # this will proceed the student in the 5th step which is monitoring2
StepManager.new(student).next_step # here will go completed
或者通过以下方式让我的工作更轻松:
StepManager.new(student).proceed.proceed.proceed.proceed.proceed.proceed
或
StepManager.new(student).complete_student # which in background does the same thing
通过这样做,我相信我永远不会错过任何东西。但是接下来的测试对我正在做的事情不太清楚。
我应该复制逻辑还是使用我的类?
答案 0 :(得分:0)
使用TDD最佳做法。例如,在rails项目中,为模型和控制器操作编写单元测试。服务相同。测试每个单元的预期。如果您需要检查更复杂的数据状态,建议您使用https://github.com/thoughtbot/factory_bot或https://github.com/thoughtbot/factory_bot_rails使用工厂。