gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:29:08 24 4
gpt4 key购买 nike

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

// 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com