我们从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中有效 .
2 回答
注入的模拟失败的原因是它们是静态字段 . 静态字段通常保留用于保持不变的字段,并且不会在测试之间发生变化,有时实例化成本很高 . 这是实例字段的反向,其中为每个测试方法创建测试类的新实例(因此具有它的实例字段'reset') . 似乎Mockito坚持这种哲学,并不试图实例化静态字段 .
修复方法是使您的字段非静态,或者如果您需要它们是静态的,那么在
BeforeClass
方法中设置它们 .你可以看看Mockito问题登记册上的http://code.google.com/p/mockito/issues/detail?id=327 . 如果这是您遇到的问题,那么它已经修复,并将在Mockito的1.9.1版本中 . 如果您认为您的问题与此问题不同,请转到http://code.google.com/p/mockito/issues并将其提升,以便可以修复 .