这是我的代码:
@Mock
MyApplication application;
@Before
public void setup() {
application = Mockito.mock(MyApplication .class);
}
@Test
public void createProducts() {
application.ormLiteDatabaseHelper.getProductDao().create(new Product());
}
我在这一行得到一个NullPointerException。我的应用程序类在其onCreate中初始化OrmLiteDatabaseHelper,我如何从MyApplication的模拟版本访问OrmLiteDatabaseHelper?
application
是一个"mock"对象。它只是伪装成一个"MyApplication
"。因此,对于方法ormLiteDatabaseHelper
,它唯一可以返回的是null
,因此对其调用getProductDao
将以NullPointerException
失败。
如果你想让它返回任何东西,那么你需要告诉你的mock,例如通过…
OrmLiteDatabaseHelper ormLiteDatabaseHelper = ..something...;
Mockito.when( application.ormLiteDatabaseHelper ).thenReturn ( ormLiteDatabaseHelper);
只有到那时,您的mock才会知道返回除null之外的其他内容。当然,还有其他方法,但对于初学者来说。。。也许你也需要部分嘲讽,这将在这里解释,但如果没有进一步的信息,很难说。
此外,如果编写@Mock
,则应该使用正确的@RunWith
注释或调用MockitoAnnotations.initMocks(this);
,而不是通过Mockito.mock
手动创建mock。如果要稍后使用,则不需要@Mock
注释。