微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PowerMock ExpectNew将不会返回模拟实例

如何解决PowerMock ExpectNew将不会返回模拟实例

我正在与PowerMock一起捕获要在我要测试的对象内部进行的构造函数调用。我在这里组装了一个示例,该示例基本上模仿了我在较大示例中想要做的事情。我在SO上也找到了类似问题的其他答案,我想我正在遵循答案中的建议,但似乎有些问题。这是我的示例:

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.powermockrunner;

import static org.easymock.EasyMock.*;
import static org.junit.jupiter.api.Assertions.*;

class Inner {
    public Inner(String one,String two,Boolean three) {
        System.out.println("Calling inner constructor");
    }

    public String saySomething() {
        return "something";
    }
}

class Outer {
    private Inner inner;

    public Outer(String arg) {
        this.inner = new Inner(arg,"foo",Boolean.TRUE);
    }

    public String getInnerString() {
        return this.inner.saySomething();
    }
}

@RunWith(powermockrunner.class)
@PrepareForTest({Outer.class,Inner.class})
class PowerMockTest {

    @Test
    void testMockConstructor() throws Exception {
        Inner innerMock = mock(Inner.class);

        PowerMock.expectNew(Inner.class,anyObject(String.class),anyObject(Boolean.class)).andReturn(innerMock);
        expect(innerMock.saySomething()).andReturn("something else");

        PowerMock.replay(innerMock,Inner.class);

        Outer outer = new Outer("foo");
        String s = outer.getInnerString();

        PowerMock.verify(innerMock,Inner.class);

        assertEquals("something else",s);
    }

}

运行此测试时,我得到:

java.lang.AssertionError: 
  Expectation failure on verify:
    Inner.saySomething(): expected: 1,actual: 0

如果我将assert放在replay块中,则它不匹配,表示它期望something else但找到something

因此,基本上,它似乎捕获了构造函数调用,但它仍会调用实际的构造函数(我不希望这样做),并在实际实例上调用saySomething而不是模拟实例。

我想念什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。