2015-12-22 3 views
0

Это мой код:не удается получить доступ к членам MyApplication от Mockito

@Mock 
MyApplication application; 

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

@Test 
public void createProducts() { 

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

Я получаю NullPointerException на этой линии. Мой класс Application в OrmLiteDatabaseHelper в его onCreate, как мне получить доступ к ormLiteDatabaseHelper из посмешиваемой версии MyApplication?

ответ

2

application - это «макет» объекта. Он только претендует на то, чтобы быть «MyApplication». Таким образом, единственное, что он может вернуть для метода ormLiteDatabaseHelper, это null и, таким образом, вызов getProductDao, который будет сбой с NullPointerException.

Если вы хотите, чтобы вернуть что-либо, то Вы должны сообщить своему издеваться, что, например, ...

OrmLiteDatabaseHelper ormLiteDatabaseHelper = ..something...; 

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

Только тогда ваш фиктивный знать, чтобы вернуть что-то другое, чем нуль. Конечно, есть и другие способы, но для начинающих ... Возможно, вам также необходимо частичное издевательство, которое будет объяснено here, но без дополнительной информации это трудно сказать.

Кроме того, если вы пишете @Mock, то вы должны либо использовать правильный @RunWith аннотацию или вызвать MockitoAnnotations.initMocks(this); вместо создания издеваться вручную через Mockito.mock. Если вы хотите использовать позже, вам не потребуется аннотация @Mock.

+0

не могли бы вы также взглянуть на этот вопрос: http://stackoverflow.com/questions/34414018/cannot-instantiate-ormlite-helper-in-a-unit-test-class-in-android-studio THANKS –