首页 文章

Mockito升级会导致空指针问题

提问于
浏览
2

我们从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 回答

  • 4

    注入的模拟失败的原因是它们是静态字段 . 静态字段通常保留用于保持不变的字段,并且不会在测试之间发生变化,有时实例化成本很高 . 这是实例字段的反向,其中为每个测试方法创建测试类的新实例(因此具有它的实例字段'reset') . 似乎Mockito坚持这种哲学,并不试图实例化静态字段 .

    修复方法是使您的字段非静态,或者如果您需要它们是静态的,那么在 BeforeClass 方法中设置它们 .

  • 4

    你可以看看Mockito问题登记册上的http://code.google.com/p/mockito/issues/detail?id=327 . 如果这是您遇到的问题,那么它已经修复,并将在Mockito的1.9.1版本中 . 如果您认为您的问题与此问题不同,请转到http://code.google.com/p/mockito/issues并将其提升,以便可以修复 .

相关问题