4
我必须单元测试一些不支持单元测试(No DI)的旧代码。有没有办法模拟一个公共方法中初始化的对象?嘲笑在外部不可见的依赖关系
public int method() {
A a = new A(ar1, arg2); //How to mock this?
}
感谢,
-Abidi
我必须单元测试一些不支持单元测试(No DI)的旧代码。有没有办法模拟一个公共方法中初始化的对象?嘲笑在外部不可见的依赖关系
public int method() {
A a = new A(ar1, arg2); //How to mock this?
}
感谢,
-Abidi
另一种选择是将代码重构为
public int method() {
A a = createA(arg1,arg2);
}
A createA(int arg1, int arg2) {
return new A(arg1,arg2);
}
在您的测试方法,现在你可以使用的Mockito的spy
和doAnswer
功能在你的测试夹具上覆盖createA
,沿线有一些东西:
Foo foo = new Foo();
Foo spiedFoo = spy(foo); // a spied version when you can copy the behaviour
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock inv) throws Throwable {
A a = mock(A.class);
return a;
}
}).when(mySpy).createA(anyInt(), anyInt());
如果你有过有问题的代码控制,你可以重构它并根据一些A-建设者使依赖公众,例如。这可能是最好的解决方案,因为它会让你的课程更少依赖A
。 [强迫你解耦设计是测试的主要优势之一。]