Mam problem z mockowaniem dao w androidzie. Nie wiem gdzie popełniam błąd. Oto kawałek kodu z testu:
@RunWith(MockitoJUnitRunner.class)
public class DeckManagerPresenterTest {
@Rule
public MockitoRule mockitoRule = MockitoJUnit.rule();
@Mock
public Context context;
@Mock
public DeckDao deckDao;
@Mock
public CardDao cardDao;
@Mock
private DeckManagerContract.View view;
private DeckManagerPresenter presenter;
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
presenter = new DeckManagerPresenter(view, context);
}
@Test
public void shouldReturnTrue_whenIsAnyDeck(){
when(deckDao.countAll()).thenReturn(3);
boolean isDeck = presenter.isAnyDeck();
assertEquals(true, isDeck);
}
/// Metoda countAll jest wywoływana w:
public boolean isAnyDeck() {
return deckDao.countAll() > 0;
}
W konsoli pojawia się błąd, że nie zrobiłem mocka SQLiteOpenHelper, nie rozumiem dlaczego, z tego co zrozumiałem to po to stosuje się mocki, aby nie wywoływać implementacji klasy:
[DEBUG] DaoManager created dao for class class xyz.miroslaw.gamification_android.model.Deck with reflection
java.lang.RuntimeException: Method getWritableDatabase in android.database.sqlite.SQLiteOpenHelper not mocked.
W projekcie używam mockito-core:1.10.19, ORMLite. Próbowałem też Robolectric do zmockowania contextu, ale też miałem jakieś błędy. Cały projekt znajduje się na https://github.com/amiroslaw/Gamification-android