PowerMocking 静态不返回预期的对象 [英] PowerMocking static does not return expected object
问题描述
我在模拟 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屋!