我的单元测试需要补充类,主要是作为创建被测试类对象的工厂。例如:
// 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
}
}
这是一种正确的方法吗?如果是的话,我应该在哪里上课?在单元测试旁边?或者这个工厂可能是一种“资源”?
答案 0 :(得分:1)
是的,在单元测试旁边完全没问题。您可以为结构创建包.helper
。
答案 1 :(得分:1)
对我来说这是一个测试数据处理的问题。
有多种方法可以处理测试数据:
在junit类中构建它们 专业人士:你看到你在junit班里有什么 缺点:您无法重复使用它们。
创建创建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
在自己的项目中创建工厂 专业人士:您可以在其他项目中使用您的testdata 缺点:您还有一个要管理的项目
我的最爱:
我最喜欢拥有自己的项目。当域对象具有接口时,您可以构建它们的jaxb实现并在xml中保存testdata。为了便于阅读和重用我最好的方法。然后,您必须说明要加载哪个xml testdata。
如果这有点过分我喜欢具有流畅界面的构建器模式:
Employee.build.name("Bob").age(32).street("teststreet");
您的案例:
我会将它们保存在与域类相同的包名下,并在最后添加包testdata。我不会命名工厂方法只得到。给它一个有意义的名字。
如果你需要一个例子如何使用spring,hibernate和junit的内存数据库,这里有一个例子:http://little-tdd-project.origo.ethz.ch/