使用PowerMockito如何使用一组特定参数验证是否调用了构造函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用PowerMockito如何使用一组特定参数验证是否调用了构造函数相关的知识,希望对你有一定的参考价值。
注意:期望那些想要指出在其中构造对象的代码的糟糕设计,而不是通过依赖注入或工厂,这些很容易被嘲笑;我正在处理为遗留代码编写测试,将代码重构为更现代的设计不是一种选择。
我有一个命令方法,它执行时将在类MyObjectWrapper中构造三个对象,它依赖于另一个类MyObject。在测试中,这两个类和6个对象都被模拟了。请考虑以下代码:
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyCommand.class)
public class MyCommandTest {
@Mock public MyObject objectOne;
@Mock public MyObject objectTwo;
@Mock public MyObject objectThree;
@Mock public MyObjectWrapper wrapperOne;
@Mock public MyObjectWrapper wrapperTwo;
@Mock public MyObjectWrapper wrapperThree;
private MyCommand command;
@Before public void beforeEach() {
command = new MyCommand();
MockitoAnnotations.initMocks(this);
initialiseWrapper(wrapperOne, objectOne, true, false);
initialiseWrapper(wrapperTwo, objectTwo, false, false);
initialiseWrapper(wrapperThree, objectThree, true, true);
}
private void initialiseWrapper(MyObjectWrapper wrapperMock, MyObject objMock, boolean option1, boolean option2) {
wrapperMock = PowerMockito.mock(MyObjectWrapper.class);
PowerMockito.whenNew(MyObjectWrapper.class)
.withParameters(MyObject.class, Boolean.class, Boolean.class)
.withArguments(objMock, option1, option2)
.thenReturn(wrapperMock);
}
@Test public void testConstructoresCalled() throws Exception {
command.execute();
VERIFY constructor with arguments: objectOne, true, false
VERIFY constructor with arguments: objectTwo, false, false
VERIFY constructor with arguments: objectThree, true, true
}
}
我知道我可以确认构造函数被调用了3次:
PowerMockito.verifyNew(MyObjectWrapper.class, times(3));
但是我需要确认构造函数被调用,其中三个传入参数。是否有可能做到这一点?
答案
PowerMockito.html#verifyNew返回一个ConstructorArgumentsVerification
,所以使用返回的对象,请参阅ConstructorArgumentsVerification
javadoc
以上是关于使用PowerMockito如何使用一组特定参数验证是否调用了构造函数的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Powermockito 以便跳过私有 void 方法[重复]
如何使用powermockito,模拟一个类中的私有静态属性,而且这个属性是了工
如何使用Powermockito以便跳过私有void方法[重复]