2013-06-13 72 views
1

我刚开始嘲笑我们的应用程序的不同层次。当我调用最后一类静态方法时,我的一个模拟对象正在返回NPE。有没有解决的办法?模拟对象调用最终类与Mockito静态方法

例如

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

的Mockito不能嘲笑一般final的方法;然而,我怀疑即使删除'final'也会对此有所帮助... – fge

+0

mockito模拟最终类或统计方法是不可能的。虽然,我认为你可以用力量模拟来做到这一点。也许你可以看看http://code.google.com/p/powermock/ – nikkatsa

+0

对不起,为了混淆,我更新了我的代码片段。请检查出 – user962206

回答

8

你必须一起使用PowerMock和Mockito。

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

在类级别:

@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); 
+0

如果我的类已用'@RunWith(Theories.class)'注释'怎么办? – niaomingjian

2

的Mockito不支持嘲讽最终class.Have看看PowerMock。它可以让你嘲笑静态方法和类。它可以和Mockito一起工作,documentation解释了如何做到这一点。

+0

我发布了错误的代码片段。请重新检查我的代码 – user962206

+2

无所谓,Mockito无法模拟最终课 – anergy

+0

所以你的意思是它嘲笑最后一堂课?我认为这只是调用最终类的静态方法 – user962206