编写测试时,我通常会有一些创建测试数据的方法:
@Test
public void someMethod_somePrecondition_someResult() {
ClassUnderTest cut = new ClassUnderTest();
NeededData data = createNeededData();
cut.performSomeActionWithTheData(data);
assertTrue(cut.someMethod());
}
private NeededData createNeededData() {
NeededData data = new NeededData();
// Initialize data with needed values for the tests
return data;
}
我认为这是一种很好的方法,可以最大限度地减少测试类中的重复(大多数单元测试框架还提供了设置测试数据的功能)。但是如果我测试需要类似测试数据的类呢?为每个测试类提供自己的createNeededData()
方法是不是一个好的选择,即使它们都是相同的,或者我应该使用其他类来生成测试数据以最小化代码重复?
答案 0 :(得分:1)
免责声明:我还没有使用过我的建议,所以这就是我所相信的。
我最近读到了一个名为M. Deinum's comment的模式,它基本上是一个工厂,可以创建具有您可能需要的不同数据的对象。 M. Fowler还将这些对象称为类似于角色,也就是说,您可能会生成代表不同用例的不同对象。
现在对象母模式并非没有它的问题,随着项目的增长,它很容易增长很多并且变得非常麻烦。在这篇object mother中,作者谈到了使用构建器模式来创建测试对象,他总结并不完美,然后继续假设一个构建器与一个对象母亲之间的组合。
所以基本上你会使用对象母模式来引导一些重复数据,然后使用返回的构建器将对象配置为特定的测试
我相信你应该像上面解释的那样做,或者只是在你的测试中重复自己(在测试时不一定是坏事)是试图评估实施这种对抗的成本你现在的表现如何。