如何在PowerMock中模拟void方法

7
如何模拟一个非静态,非final的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。
3个回答

2

如果您想模拟非静态方法,需要指定模拟对象:

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
    }
}

0

您可以使用PowerMock.createmock()来模拟带有方法的类。

例如,您有一个ClassA类和一个Void方法methodA。然后,您可以按以下方式进行模拟:

A a = PowerMock.CreateMock(A.class);
a.methodA();
PowerMock.replay(a);

注意:在上述情况下,方法a是void,这就是EasyMock.expect没有返回值的原因;

-1

我现在没有在IDE上,但我认为你可以这样做:

final Name name = mock(Name.class);
doNothing().when(name).methodName();

我已经尝试过了,但是没有什么用。由于某些原因,它实际上会调用原来的methodName()方法,而没有模拟这个调用。 - user2831237
“无用”是什么意思?你是否遇到了错误,还是观察到了一些意外的行为? - Romski
抱歉,它没有按预期工作。它调用了原始方法而不是模拟调用,并且什么也没做。这正是我所期望的。 - user2831237

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接