如何解决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 举报,一经查实,本站将立刻删除。