我们从mockito-all-1.8.5.jar升级到mockito-all-1.9.0.jar,现在在为被模拟的类使用注释时会看到空指针。这是一个例子:
@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 public void setUp() throws Exception { MockitoAnnotations.initMocks(this); Mockito.reset(accountManager, businessUnitManager); }
只要在下载控制器中引用了accountManager,它就会抛出一个npe。这适用于1.8.5。
答案 0 :(得分:4)
您可以查看Mockito问题注册表中的http://code.google.com/p/mockito/issues/detail?id=327。如果这是您遇到的问题,那么它已经修复,并将在Mockito的1.9.1版本中。如果您认为自己的问题与此问题不同,请转到http://code.google.com/p/mockito/issues并提出问题,以便修复。
答案 1 :(得分:4)
注入的模拟失败的原因是因为它们是静态字段。静态字段通常保留用于保持不变的字段,并且不会在测试之间发生变化,有时实例化成本很高。这是实例字段的反向,其中为每个测试方法创建测试类的新实例(因此具有它的实例字段'reset')。似乎Mockito坚持这种哲学,并不试图实例化静态字段。
修复方法是让你的字段非静态,或者如果你需要它们是静态的,那么在BeforeClass
方法中设置它们。