我有以下两个类(class)
public class SampleTest {
public Integer getResult() {
Test1 test1 = new Test1(5);
Integer j = doSomeThing(test1);
return j;
}
public Integer doSomeThing(Test1 test1){
Integer p = test1.getValue();
return p+1;
}
}
public class Test1 {
Integer i;
Test1(Integer i){
this.i = i*2;
}
Integer getValue(){
return i;
}
我想对 SampleTest getResult() 进行单元测试,但想在其中模拟 Test1() ,以便返回在 UnitTests 中设置的任何值。我无法更改这些类中的任何一个。
我使用 Mockito 尝试了一些模式,但没有成功。
请提出一些好的建议。
最佳答案
我认为您需要 Mockito 扩展 Powermock为此,因为它需要更改类的字节码。请参阅Mock construction of new objects有关如何执行此操作的说明。
主要工具可能是expectNew
或createMockAndExpectNew
。例如(未经测试,可能遗漏了一些东西,但总体方向):
Test1 mockedTest1 = createMockAndExpectNew(Test1, any(Integer));
expect(mockedTest1.getValue()).andReturn(42);
replayAll(); // setup all objects maintained by Powermock.
assertEquals(new SampleTest().getResult(), 43);
关于使用内部对象进行 Java 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31845021/