无法从 Mockito 访问 MyApplication 成员

Cannot access MyApplication members from Mockito

这是我的代码:

@Mock
MyApplication application;

@Before
public void setup() {
    application = Mockito.mock(MyApplication .class);
}

@Test
public void createProducts() {

    application.ormLiteDatabaseHelper.getProductDao().create(new Product());
}

我在这一行收到 NullPointerException。我的应用程序 class 在其 onCreate 中初始化了 OrmLiteDatabaseHelper,如何从模拟版本的 MyApplication 访问 ormLiteDatabaseHelper?

application 是一个 "mock" 对象。它只是伪装成“MyApplication”。因此,对于方法 ormLiteDatabaseHelper,它唯一可以 return 的是 null,因此调用 getProductDao 将失败并显示 NullPointerException.

如果你想让它return任何东西,那么你需要告诉你的模拟,例如通过...

OrmLiteDatabaseHelper ormLiteDatabaseHelper = ..something...;

Mockito.when( application.ormLiteDatabaseHelper ).thenReturn ( ormLiteDatabaseHelper);

只有这样你的 mock 才会知道 return 除了 null 之外的东西。当然,还有其他方法,但对于初学者...也许你还需要部分模拟,这将得到解释here,但没有进一步的信息,很难说。

此外,如果您编写 @Mock,那么您应该使用正确的 @RunWith 注释或调用 MockitoAnnotations.initMocks(this); 而不是通过 Mockito.mock 手动创建模拟。如果要使用后者,则不需要@Mock注解。