PowerMocking 静态不返回预期的对象 [英] PowerMocking static does not return expected object

查看:40
本文介绍了PowerMocking 静态不返回预期的对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在模拟 Calendar.getInstance() 时遇到问题.正如你现在这个方法返回一个日历 - 我正在模拟的对象.

现在我的代码如下所示:

@RunWith(PowerMockRunner.class)@PrepareForTest(Calendar.class)公共类 SurveillanceDatabaseTest {@测试公共无效 testFailingDatabase() 抛出异常 {模拟静态(日历.class);日历日历 = new GregorianCalendar();calendar.add(Calendar.HOUR, 1);when(Calendar.getInstance()).thenReturn(calendar);最终监视监视 = new Surveillance();监视.checkDatabase();}}

Calendar.getInstance()surveillance.checkDatabase() 中被多次调用,并且每次它都是一个新对象而不是 Calendar 的预期模拟.p>

谁能看出我做错了什么?

解决方案

看来需要在PrepareForTest标签中添加目标测试类:
@PrepareForTest({ Calendar.class, Surveillance.class })

@RunWith(PowerMockRunner.class)@PrepareForTest({ Calendar.class, Surveillance.class })公共类 SurveillanceDatabaseTest {@测试公共无效 testFailingDatabase() 抛出异常 {模拟静态(日历.class);日历日历 = new GregorianCalendar();calendar.add(Calendar.HOUR, 1);when(Calendar.getInstance()).thenReturn(calendar);最终监视监视 = new Surveillance();监视.checkDatabase();}}

如果我们将 Surveillance 类移到 MockCalendarTest 类之外的某个地方,即使是上面的 Tom Tresansky 示例也需要它.

I have a problem mocking Calendar.getInstance(). As you now this method returns a Calendar - the object I am mocking.

Right now my code looks like this:

@RunWith(PowerMockRunner.class)
@PrepareForTest(Calendar.class)
public class SurveillanceDatabaseTest {
    @Test
    public void testFailingDatabase() throws Exception {
        mockStatic(Calendar.class);
        Calendar calendar = new GregorianCalendar();
        calendar.add(Calendar.HOUR, 1);
        when(Calendar.getInstance()).thenReturn(calendar);
        final Surveillance surveillance = new Surveillance();
        surveillance.checkDatabase();
   }
}

Calendar.getInstance() gets called various times in surveillance.checkDatabase() and every time it is a new object and not the expected mock of Calendar.

Can anyone see what I am doing wrong?

解决方案

It seems that you need to add the target test class in the PrepareForTest tag:
@PrepareForTest({ Calendar.class, Surveillance.class })

@RunWith(PowerMockRunner.class)
@PrepareForTest({ Calendar.class, Surveillance.class })
public class SurveillanceDatabaseTest {
    @Test
    public void testFailingDatabase() throws Exception {
        mockStatic(Calendar.class);
        Calendar calendar = new GregorianCalendar();
        calendar.add(Calendar.HOUR, 1);
        when(Calendar.getInstance()).thenReturn(calendar);
        final Surveillance surveillance = new Surveillance();
        surveillance.checkDatabase();
   }
}

Even Tom Tresansky's example above will need it if we move the Surveillance class to somewhere outside MockCalendarTest class.

这篇关于PowerMocking 静态不返回预期的对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆