Java 如何在powermock中模拟void方法

Java 如何在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

如何模拟非静态、非最终的void方法方法签名如下。我用的是Powermockito

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()方法,而不是模拟调用。您所说的“无用”是什么意思?您是否遇到错误,或者您是否观察到一些意外行为?抱歉,它没有按预期工作。它是在调用原始方法,而不是模拟调用,并且没有执行任何操作。这是我所期待的