模拟对象使用Mockito调用final类静态方法

时间:2013-06-13 09:18:28

标签: java unit-testing junit mockito

我刚刚开始模拟我们应用程序的不同层。当我调用最终类静态方法时,我的一个模拟对象正在返回NPE。有办法解决这个问题吗?

e.g。

when(mockObject.someMethod(FinalClass.staticMethod(someParam)).anotherMethodCall)
    .thenReturn("someString");

2 个答案:

答案 0 :(得分:9)

你必须一起使用PowerMock和Mockito。

我不明白你的代码片段正在尝试做什么,但是下面的代码片段允许Calendar类的静态getInstance()方法返回一个模拟的Calendar对象 。也许这会指出你正确的方向

在班级:

@RunWith(PowerMockRunner.class)
@PrepareForTest(Calendar.class)
public class XXXXXX {

在您的测试方法中

PowerMockito.mockStatic(Calendar.class);
    Calendar calendar = mock(Calendar.class);
    when(calendar.get(eq(Calendar.HOUR_OF_DAY))).thenReturn(3);

    Mockito.when(Calendar.getInstance()).thenReturn(calendar);

答案 1 :(得分:2)

Mockito不支持模拟最终的类。看看PowerMock。它允许你模拟静态方法和类。它可以与Mockito合作,documentation解释了如何做到这一点。