我们从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中起到了作用。
注入的mock失败的原因是因为它们是静态字段。静态字段通常是为保持不变的字段保留的,并且在测试之间不会发生变化,并且有时实例化成本很高。这与实例字段相反,在实例字段中,为每个测试方法创建一个新的测试类实例(从而使其实例字段"重置")。Mockito似乎坚持这一哲学,并没有试图实例化静态字段。
修复方法是使字段非静态,或者如果需要它们是静态的,则在BeforeClass
方法中设置它们。
您可以查看http://code.google.com/p/mockito/issues/detail?id=327在Mockito问题登记册上。如果这是你遇到的问题,那么它已经被修复,并将出现在Mockito的1.9.1版本中。如果您认为您的问题与本次不同,请访问http://code.google.com/p/mockito/issues把它举起来,这样它就可以固定了。