首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerMock构造函数模拟无法工作

PowerMock构造函数模拟无法工作
EN

Stack Overflow用户
提问于 2017-03-24 05:53:40
回答 2查看 742关注 0票数 0

我使用PowerMock模拟了一个构造函数。

代码语言:javascript
复制
@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

EN

Stack Overflow用户

回答已采纳

发布于 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)

票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42992347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档