给定一个从 ActiveRecord::Base 继承的类,我们称它为 Task,我有两个子类,它们使用标准 Rails 单表继承来专门处理任务的某些方面,Activity 和 Training。
在查看其他可用数据后,我对这个选择充满信心,因为模型的实际数据是相同的,只是行为不同。非常适合 STI。
可以创建、启动、推进和完成任务。这是这些转换中涉及的一些逻辑,尤其start()
是要求对基类进行专门化的逻辑。
由于我正在执行此 TDD 并开始使用具有完整测试覆盖率的工作任务调用,我现在想知道如何继续。我有几个我想过的情景:
复制 Task 的测试并端到端测试 Activity 和 Training 并进行一些小的修改以测试它们的专业化。优点:快速简单。缺点:它会重复代码,虽然这在这里可能不是什么大问题,但当专业化数量增加时就会出现问题。
拆分测试并保留大部分测试代码,
task_spec.rb
同时将专业化测试转移到各个子类的新规范中。优点:保持测试干燥。缺点:我在基础测试中实例化什么类?
最后一个问题是什么在困扰我。现在我已经设置了基类测试,可以从一个 Concert 子类中随机创建一个类,但这是一种好的形式吗?它几乎让我想使用方法 1 只是为了保持测试运行的一致性,否则我必须找到一种方法来确定我的类选择的随机性,以便我至少有一个可重复的测试套件的随机种子随机选择。
我猜这一定是人们遇到的一个常见问题,但我找不到关于这个主题的任何好的信息。您对此事有任何资源或想法吗?