我的单元测试需要补充类,主要作为用于创建被测类的对象的工厂。例如:
// 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
}
}
这是正确的做法吗?如果是的话,我应该把这门课放在哪里?就在单元测试旁边吗?或者也许这个工厂是一种“资源”?
最佳答案
对我来说,这是一个测试数据处理的问题。
有几种处理测试数据的方法:
在 junit 类中构建它们。
优点:您可以在 junit 类中看到您拥有的内容。
缺点:您无法重复使用它们。创建用于创建测试数据的工厂。
优点:科西嘉粒度重用得到保证
缺点:无法以良好的结构化方式进行细粒度重用(当您需要具有不同属性值的测试数据时),当您使用 maven 构建时,您只能访问项目内部的测试数据。
构建器 en.wikipedia.org/wiki/Builder_pattern 和对象母模式 martinfowler.com/bliki/ObjectMother.html 在这种情况下很有用。
这是一个比较:geekswithblogs.net/Podwysocki/archive/2008/01/08/118362.aspx在自己的项目中创建工厂。
优点:您可以在其他项目中使用您的测试数据
缺点:您还有一个额外的项目需要管理
我的最爱:
我最喜欢拥有一个自己的项目。当域对象具有接口(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/