我使用PowerMock模拟了一个构造函数。
@RunWith(PowerMockRunner.class)
@PrepareForTest(SubjectClass.class)
class SomeClassTest {
@Mock
SubjectClass subjectObject;
@InjectMock
SomeClass someObject;
...
@Test
public void testMethod_inp_exp() throws Exception {
PowerMock.whenNew(SubjectClass.class).withAnyArguments().thenReturn(subjectObject);
when(subjectObject.subjectMethod(someParameters).thenReturn(null);
assertThat(someObject.someMethod(someOtherParam).isEqualTo(someCondition);
}
}这不足以模拟构造函数吗?有什么遗漏了吗。
因为,我已经使用Mockito.mockingDetails(subjectObject).isMock()在调用它的someMethod中验证了代码,并且我得到了false。
发布于 2017-03-24 12:08:24
文档显式地声明,为了模拟构造函数,您应该:
使用
PowerMockito.whenNew,例如。 whenNew(MyClass.class).withNoArguments().thenThrow(new IOException(“错误消息”); 请注意,您必须准备创建MyClass新实例的类以供测试,而不是MyClass本身。例如,如果执行新MyClass()的类称为X,则必须执行@PrepareForTest(X.class)才能使whenNew工作: @RunWith(PowerMockRunner.class) @PrepareForTest(X.class)公共类XTest { @ Test () {IOException(“错误消息”));X=新X();x.y();// y是执行“新MyClass()”的方法。}}
因此,在您的情况下,您需要用@PrepareForTest(SubjectClass.class)替换@PrepareForTest(SomeClass.class)
发布于 2017-03-24 07:43:09
SubjectClass subjectClassMock=EasyMock.createNiceMock(SubjectClass.class);
PowerMock.expectNew(SubjectClass.class,<your arguments for constructor>).andReturn(subjectClassMock);确保在@PrepareForTest中同时添加SubjectClass和SomeClass,并执行PowerMock.replayAll();
https://stackoverflow.com/questions/42992347
复制相似问题