实体模型的单元测试和工厂



假设我有一个需要测试的类C。它的部分工作是创建许多其他非平凡的类对象(每个类对象都有自己的业务逻辑(,并在这些新对象上调用各种方法。我希望能够在不测试C创建的其他对象的实现的情况下测试类C。唯一真正的解决方案是创建一个工厂来创建那些非琐碎的对象,然后将一个模拟的工厂实例传递到测试中吗?我不希望有一个单独的工厂来创建其他非平凡对象,但另一方面,我不希望每个非平凡类都有一个工厂。

还有其他建议吗?

编辑:根据请求添加了一些伪代码

public B doIt()
{
List<A> as = getListOfAsFromDatabase();
AParser AParser = new AParser();
boolean foo = aParser.parse(as); // may modify the list of A's
B b = new B();
return b.add(foo, as);
}

如果依赖对象的创建是在成员级别,我们可以使用Mockito和PowerMock来创建mock并更新成员到mock的依赖关系。我使用静态内部类来简化这一点,这个解决方案也适用于常规类。

public class Test1 {
@Test
public void test() {
B mockedb = org.mockito.Mockito.mock(B.class);
A a = new A();
org.powermock.reflect.Whitebox.setInternalState(a, "b", mockedb);
a.exe();
}
public static class A {
private B b = new B();
public void exe() {
List<String> l = new ArrayList<>();
l.add("a");
b.exeB(l);
System.out.println(l);
}
public static class B {
public void exeB(List<String> s) {
s.add("b");
}
}
}
}

最新更新