Java junit测试中的模拟方法
我必须对一些方法进行一些jUnit测试(使用mock),并且我不能更改源代码。有没有可能在不更改源代码的情况下更改函数的行为(可能带有mock) 看看一个简单的例子: 类Java junit测试中的模拟方法,java,junit,mockito,powermock,Java,Junit,Mockito,Powermock,我必须对一些方法进行一些jUnit测试(使用mock),并且我不能更改源代码。有没有可能在不更改源代码的情况下更改函数的行为(可能带有mock) 看看一个简单的例子: 类A和B是源代码(不能更改它们)。我想在B中调用run()方法时,将其行为从A更改为run()。有什么想法吗 public class A { public String run(){ return "test"; } } public class B extends A { public
A
和B
是源代码(不能更改它们)。我想在B
中调用run()
方法时,将其行为从A
更改为run()。有什么想法吗
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()
}
}
可以使用mockito的方法创建部分模拟。所以你的测试类看起来像
public class C {
@Test
public void jUnitTest(){
B mockB = spy(new MockB());
when( mockB.run() ).thenReturn("foo");
mockB.testing();
}
}
这假设您要模拟的方法没有声明为final。请发布至少可编译的示例代码。