问题描述
我正在与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 (将#修改为@)