在哪里放置补充类,在JUnit中使用?

时间:2010-10-04 13:57:26

标签: java junit

我的单元测试需要补充类,主要是作为创建被测试类对象的工厂。例如:

// EmployeeTest.java
public class EmployeeTest {
  @Test public void testName() {
    Employee emp = EmployeeTestFactory.get(); // static method
    assert(emp.getName() instanceof String);
  }
}
// SalaryTest.java
public class SalaryTest {
  @Test public void testAlwaysPositive() {
    Employee emp = EmployeeTestFactory.get(); // static method
    assert(emp.getSalary() > 0);
  }
}

如您所见,我需要在两个单元测试中使用类Employee的实例。我想创建一个简单的工厂,它将根据需要创建这样的对象,例如:

public class EmployeeTestFactory {
  public static Employee get() {
    // create it, make persistent, fill with data
    // and return
  }
}

这是一种正确的方法吗?如果是的话,我应该在哪里上课?在单元测试旁边?或者这个工厂可能是一种“资源”?

2 个答案:

答案 0 :(得分:1)

是的,在单元测试旁边完全没问题。您可以为结构创建包.helper

答案 1 :(得分:1)

对我来说这是一个测试数据处理的问题。

有多种方法可以处理测试数据:

  1. 在junit类中构建它们 专业人士:你看到你在junit班里有什么 缺点:您无法重复使用它们。

  2. 创建创建testdata的工厂 专业人士:保证了Corse粒度重用 缺点:无法以良好的结构化方式进行细粒度重用(当您需要具有不同属性值的testdata时),当您使用maven构建时,您只能访问项目内的testdata。
    在这种情况下,构建器en.wikipedia.org/wiki/Builder_pattern和对象母模式martinfowler.com/bliki/ObjectMother.html非常有用。
    这是一个比较:geekswithblogs.net/Podwysocki/archive/2008/ 1月8日/ 118362.aspx

  3. 在自己的项目中创建工厂 专业人士:您可以在其他项目中使用您的testdata 缺点:您还有一个要管理的项目

  4. 我的最爱:

    我最喜欢拥有自己的项目。当域对象具有接口时,您可以构建它们的jaxb实现并在xml中保存testdata。为了便于阅读和重用我最好的方法。然后,您必须说明要加载哪个xml testdata。

    如果这有点过分我喜欢具有流畅界面的构建器模式:

     Employee.build.name("Bob").age(32).street("teststreet");
    

    您的案例:

    我会将它们保存在与域类相同的包名下,并在最后添加包testdata。我不会命名工厂方法只得到。给它一个有意义的名字。

    如果你需要一个例子如何使用spring,hibernate和junit的内存数据库,这里有一个例子:http://little-tdd-project.origo.ethz.ch/