我必须为某些方法进行一些jUnit测试(使用模拟),但我无法更改源代码。是否有可能在没有更改源代码的情况下更改函数的行为(可能使用mocks)?
看一个直截了当的例子:
类A
和B
是源代码(无法更改它们)。我想在run()
中调用A
方法时更改B
方法的行为。有什么想法吗?
public class A {
public String run(){
return "test";
}
}
public class B extends A {
public void testing() {
String fromA = run(); //I want a mocked result here
System.out.println(fromA);
}
}
public class C {
B mockB = null;
@Test
public void jUnitTest() {
mockB = Mockito.mock(B.class);
// And here i want to call testing method from B but with a "mock return" from run()
}
}
答案 0 :(得分:1)
您可以使用mockito的spy()方法创建部分模拟。所以你的测试类看起来像
public class C {
@Test
public void jUnitTest(){
B mockB = spy(new MockB());
when( mockB.run() ).thenReturn("foo");
mockB.testing();
}
}
这假定您要模拟的方法未声明为final。