0

我刚刚开始进行单元测试,当主题测试模型时,我有点困惑和不知所措。我目前有一些带有 setter 和 getter 的 ActiveRecord 模型。它们中的大多数只是简单地封装数据,只有少数带来了一些新的东西,例如返回 firstName 和 lastName 字段连接的 getFullName() 方法。

那么我应该测试什么?我应该测试每个属性分配还是只测试 getFullName() 之类的特殊方法?我应该去到什么程度?我什么时候应该测试类本身,什么时候应该实际测试数据库插入?实体中已经存在的验证怎么样,我应该考虑到这一点吗?

让我不知所措的是,对于一个有很多字段的实体,我似乎需要进行大量的测试。有办法解决吗?

示例将不胜感激!

4

1 回答 1

0

编写你需要的测试,让你确信你的程序可以正常工作。

有人会争辩说,如果类没有业务逻辑,就没有必要为它编写测试。根据这个论点,那么您的简单 getter 和 setter 就不需要测试了。您只为具有“业务逻辑”的代码部分编写测试。

然而,争论的另一面是,如果你编写代码,你应该为它编写一个测试。根据这个论点,你应该为他们写一个测试。测试最终将变得非常微不足道。您实例化该对象,使用 setter 设置一个值,然后断言该值随后使用 getter 返回。你最终会得到很多简单的测试,编写起来可能会很乏味。

我在第二个阵营,并且发现如果某些东西难以测试或变得难以测试,这表明我的设计存在问题。在这种情况下,您可能有一些不需要的访问器方法。可能发生的情况是您在数据对象中拥有所有属性,并且“需要”为每个属性设置一个 getter 和 setter。但你真的吗?

在你的问题中,你提到你有一个getFullName方法。那么你真的需要getFirstNameand的方法getLastName吗?为什么在页面渲染过程中对象中的数据会发生变化?为什么不放弃设置器并使数据记录“不可变”,以便通过将新对象发送到数据库进行更新/创建来完成更新?

我敢打赌,你有这个问题的原因是你写了这段代码,现在正试图回去为它写测试。您拥有此数据对象并为所有内容自动创建 getter 和 setter。然后编写您在使用它时需要的额外方法(如getFullName方法)。相反,我建议您仅在需要时创建访问器。然后您当时创建测试,您会发现函数列表要小得多。您可能有一些方法可以获取您需要的数据组合,还有一种批量方法可以获取特定形式的所有数据(即 json)。

于 2015-10-16T15:20:22.467 回答