2012-03-28 80 views
2

从我们的Mockito,全1.8.5.jar升级的Mockito,全1.9.0.jar现在看空指针使用的类注释时,被嘲笑。下面是一个例子:升级的Mockito导致空指针问题

 
    @Mock 
    private static IAccountManager accountManager; 
    @Mock 
    private static IBusinessUnitManager businessUnitManager; 
    private static Gson parser;

@InjectMocks private static DownloadController downloadController;

@BeforeClass public static void setUpBeforeClass() throws Exception { parser = new Gson();

downloadController = new DownloadController(accountManager, 
    businessUnitManager, parser); 

}

@Before 公共无效设定()抛出异常{ MockitoAnnotations.initMocks(本); Mockito.reset(accountManager,businessUnitManager); }

只要在下载控制器中引用accountManager,它就会引发一个npe。这工作在1.8.5。

+2

是不是因为你的领域是静态的? – Dunes 2012-03-28 17:04:58

+0

是的,事实证明我必须删除@InjectMocks,因为并不是所有参数都可以注入并从DownloadController中移除静态。如果您想将您的评论移至答案,我会选择它。 – 2012-03-28 18:35:46

+0

啊,漫长的一天。通过注入我的意思是嘲笑...大声笑 – 2012-03-28 18:57:39

回答

4

为什么注入嘲笑失败的原因是因为他们是静态字段。静态字段通常保留给保持不变的字段,并且不会从测试变为测试,并且实例化有时可能很昂贵。对于实例字段,这是相反的情况,为每个测试方法创建一个新的测试类实例(因此它的实例字段为“复位”)。看起来Mockito坚持这一理念,并不试图实例化静态字段。

解决方法是要么让你的领域非静态的,或者如果你需要他们是静态的,然后设置它们在BeforeClass方法。