Java 如何在powermock中模拟void方法
如何模拟非静态、非最终的void方法方法签名如下。我用的是PowermockitoJava 如何在powermock中模拟void方法,java,unit-testing,junit4,powermock,Java,Unit Testing,Junit4,Powermock,如何模拟非静态、非最终的void方法方法签名如下。我用的是Powermockito public class Name{ public void methodName{ ... ... } } @RunWith(PowerMockRunner.class) @PrepareForTest({Name.class}) public class TestClass{ @Test public void testMethodName(){ PowerMockito.doNothing().when
public class Name{
public void methodName{
...
...
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest({Name.class})
public class TestClass{
@Test
public void testMethodName(){
PowerMockito.doNothing().when(Name.class, methodName);
//some when calls after this and assert later on
}
调用methodName时,我不想执行任何操作。上述代码不起作用。它说methodName无法解析。我现在不在IDE中,但我认为您可以这样做:
final Name name = mock(Name.class);
doNothing().when(name).methodName();
可以使用PowerMock.createmock()在方法所在的位置模拟类。 例如,你有ClassA和methodA,这是一个无效的方法。 然后,您可以通过以下方式对其进行模拟:
A a = PowerMock.CreateMock(A.class);
a.methodA();
PowerMock.replay(a);
注意:在上述情况下,方法a无效,这就是EasyMock.expect不返回的原因 如果要模拟非静态方法,则需要指定模拟对象:
public class Name{
public void methodName{
...
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest({Name.class})
public class TestClass{
@Test
public void testMethodName(){
Name myName = PowerMockito.mock(Name.class);
PowerMockito.doNothing().when(myName).methodName();
//some when calls after this and assert later on
}
}
我试过了,但没有用。它实际上是出于某种原因调用原始methodName()方法,而不是模拟调用。您所说的“无用”是什么意思?您是否遇到错误,或者您是否观察到一些意外行为?抱歉,它没有按预期工作。它是在调用原始方法,而不是模拟调用,并且没有执行任何操作。这是我所期待的