复制逻辑还是在测试中使用?

时间:2018-03-27 16:40:24

标签: ruby unit-testing testing rspec

我对在规范测试中编写太多逻辑感到担忧。

所以我们假设我们studentstatusessteps

学生身份从

开始
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

通过这样做,我相信我永远不会错过任何东西。但是接下来的测试对我正在做的事情不太清楚。

我应该复制逻辑还是使用我的类?

1 个答案:

答案 0 :(得分:0)

使用TDD最佳做法。例如,在rails项目中,为模型和控制器操作编写单元测试。服务相同。测试每个单元的预期。如果您需要检查更复杂的数据状态,建议您使用https://github.com/thoughtbot/factory_bothttps://github.com/thoughtbot/factory_bot_rails使用工厂。