java - 在哪里放置 JUnit 中使用的补充类?

标签 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
  }
}

这是正确的做法吗?如果是的话,我应该把这门课放在哪里?就在单元测试旁边吗?或者也许这个工厂是一种“资源”?

最佳答案

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

有几种处理测试数据的方法:

  1. 在 junit 类中构建它们。
    优点:您可以在 junit 类中看到您拥有的内容。
    缺点:您无法重复使用它们。

  2. 创建用于创建测试数据的工厂。
    优点:科西嘉粒度重用得到保证
    缺点:无法以良好的结构化方式进行细粒度重用(当您需要具有不同属性值的测试数据时),当您使用 maven 构建时,您只能访问项目内部的测试数据。

    构建器 en.wikipedia.org/wiki/Builder_pattern 和对象母模式 martinfowler.com/bliki/ObjectMother.html 在这种情况下很有用。
    这是一个比较:geekswithblogs.net/Podwysocki/archive/2008/01/08/118362.aspx

  3. 在自己的项目中创建工厂。
    优点:您可以在其他项目中使用您的测试数据
    缺点:您还有一个额外的项目需要管理

我的最爱:

我最喜欢拥有一个自己的项目。当域对象具有接口(interface)时,您可以构建它们的 jaxb 实现并将测试数据保存在 xml 中。为了可读性和重用性,这对我来说是最好的方法。然后您只需说出要加载的 xml 测试数据集。

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

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

您的案例:

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

如果您需要示例如何将内存数据库与 spring、hibernate 和 junit 结合使用,请参阅以下示例:http://little-tdd-project.origo.ethz.ch/

关于java - 在哪里放置 JUnit 中使用的补充类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3855918/

相关文章:

java - TestNG/Junit 在控制台中配置输出样式

java - Spring 启动测试 : @Sql annotation Unable to locate sql files placed in src/test/resources

java - 将字符串转换为 byte[] 并将 byte[] 转换为字符串

java - 如何在 Android 上运行小程序?

java - 如何在 Spring Boot 中设置基于预身份验证 header 的身份验证?

java - 如何在 Eclipse 中默认 JUnit 启动配置的工作目录?

java - spring-boot-test spyBean 注释未注入(inject)依赖项

javascript - 用java解码html脚本

java - 为什么我们需要针对普通 POJO 运行测试用例

java - 在 JUnit 测试中获取 JAR 列表