PowerMock + EasyMock:无需调用的私有void方法



玩得开心!

我需要用模拟实现代替类的私有void方法,但不知道如何做到这一点。我试着用这样的结构:

Test test = PowerMock.createPartialMock(Test.class, "setId");
PowerMock.expectPrivate(test , "setId", EasyMock.anyLong()).andAnswer(
    new IAnswer<Void>() {
        @Override
        public Void answer() throws Throwable {
            return null;
        }
    });
PowerMock.replay(test);

但是内部PowerMock的类名为WhiteBox调用我的"setId"方法,这是错误的我的任务。有人可以,请,建议,如何避免方法调用,并可能取代一个自定义的方法体?

终于。我有办法了。问题是我错过了以下注释:

@RunWith(PowerMockRunner.class)
@PrepareForTest(Test.class)

无论如何,要使PowerMock工作,我需要添加一些注释,这似乎相当令人困惑。如果这不是遗留代码,我更喜欢Mockito。

我不太确定我是否明白你的问题。但对我来说,下面的代码工作完美,只是字符串"Invoked!"正在打印如果我删除test.setS(33L);,测试将失败,例外:

@RunWith(PowerMockRunner.class)
@PrepareForTest(MainTest.Test2.class)
public class MainTest {
    @Test
    public void testName() throws Exception {
        Test2 test = PowerMock.createPartialMock(Test2.class, "setS");
        PowerMock.expectPrivate(test , "setS", EasyMock.anyLong()).andAnswer(
                new IAnswer<Void>() {
                    @Override
                    public Void answer() throws Throwable {
                        System.out.println("Invoked!");
                        return null;
                    }
                }).atLeastOnce();
        PowerMock.replay(test);
        test.setS(33L);
        PowerMock.verify(test);
    }

    class Test2 {
        long s;
        private long getS() {
            return s;
        }
        private void setS(long s) {
            this.s = s;
            System.out.println("Not this!");
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新