Mockito升级会导致空指针问题

时间:2012-03-28 15:07:46

标签: java mockito

我们从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 个答案:

答案 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方法中设置它们。