我刚刚开始进行单元测试,当主题测试模型时,我有点困惑和不知所措。我目前有一些带有setter和getter的ActiveRecord模型。它们中的大多数只是简单地封装数据,其中只有少数带来了一些新的东西,例如getFullName()方法返回firstName和lastName字段的连接。
那么我应该测试什么?我应该测试每个单独的属性赋值还是应该只测试像getFullName()这样的特殊方法?我应该走到什么程度?什么时候应该测试类本身,什么时候应该实际测试数据库插入?关于实体中已经存在的验证,我应该考虑到这一点吗?
让我不知所措的是,对于一个有很多字段的实体,我似乎需要进行大量的测试。有别的办法吗?
的例子将特别感谢!
编写您需要的测试,以使您对程序正常工作有信心。
有些人会争辩说,如果类没有业务逻辑,就没有必要为它编写测试。根据这种说法,你的简单getter和setter就不需要测试了。你只为代码中有"业务逻辑"的部分编写测试。然而,争论的另一面是,如果你写代码,你应该为它写一个测试。按照这种说法,您应该为它们编写一个测试。测试最终会变得非常琐碎。您实例化对象,用setter设置一个值,然后断言该值随后用getter返回。您最终会得到很多简单的测试,编写起来可能会很乏味。
我属于第二个阵营,并且发现如果某些东西很难测试或成为测试的痛苦,这表明我的设计有问题。在这种情况下,您可能拥有不需要的东西的访问器方法。可能发生的情况是,你在数据对象中拥有所有属性,并且"需要"为每个属性设置getter和setter。但你真的吗?
在你的问题中,你提到你有一个getFullName
方法。所以你真的需要getFirstName
和getLastName
的方法吗?为什么对象中的数据会在页面呈现期间发生变化?为什么不放弃setter并使数据记录"不可变",以便通过发送新对象到数据库进行更新/创建来完成更新?
我敢打赌,你有这个问题的原因是你写了这段代码,现在正试图回去为它写测试。有了这个数据对象,就自动为所有东西创建了getter和setter。然后编写使用它时所需的额外方法(如getFullName
方法)。相反,我建议您只在需要时创建访问器。然后创建测试,您将发现函数列表实际上更小了。你可能有一些方法来获得你需要的数据组合,以及一个批量方法来获得特定形式的所有数据(如json)。