Junit 模拟外部不可见的依赖项
我必须对一些不支持单元测试(无DI)的旧代码进行单元测试。有没有办法模拟在公共方法中初始化的对象Junit 模拟外部不可见的依赖项,junit,mockito,Junit,Mockito,我必须对一些不支持单元测试(无DI)的旧代码进行单元测试。有没有办法模拟在公共方法中初始化的对象 public int method() { A a = new A(ar1, arg2); //How to mock this? } 谢谢 -Abidi如果您可以控制所讨论的代码,您可以重构它并公开依赖关系,例如,通过依赖某个A-builder。这可能是最好的解决方案,因为它可以减少类对A的依赖。[强制您解耦设计是测试的主要优势之一。]另一个选择是将代码重构为 public int
public int method() {
A a = new A(ar1, arg2); //How to mock this?
}
谢谢
-Abidi如果您可以控制所讨论的代码,您可以重构它并公开依赖关系,例如,通过依赖某个A-builder。这可能是最好的解决方案,因为它可以减少类对
A
的依赖。[强制您解耦设计是测试的主要优势之一。]另一个选择是将代码重构为
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());