Ich habe einen Vortragenden, der eine Methode getView() hat, die eine Ansicht zurückgibt. Die View, die MyView (eine Schnittstelle) implementiert, hat eine Methode isActive, die angibt, ob sie aktiv ist.Unit Test - Mockito gibt NullPointerException beim Mocking einer Schnittstelle
Ich teste den Presenter.
Im @Before Setup der TestClass initialisiere ich den Presenter.
testClass.java:
@RunWith(AndroidJUnit4.class)
public class testClass {
private Presenter presenter;
@Mock
private MyView mockView;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
presenter = new Presenter(mockView);
when(mockView.isActive()).thenReturn(true);
}
@Test
public void testIsActive() {
presenter.isViewActive();
verify(mockView).isActive();
}
Presenter.java:
public class Presenter {
private MyView view;
// The following view is an instance of MyView, not View (typo before).
public Presenter(MyView view) {
this.view = view;
}
public boolean isViewActive() {
return getView().isActive();
}
public MyView getView() {
return view;
}
}
MyView.class:
public interface MyView {
boolean isActive();
}
jedoch der obige Code würde Nullpointer erzeugen, wenn
presenter.isViewActive();
läuft.
Warum ist es?
Und wenn ich
ersetzen@Mock
private MyView mockView;
mit
@Mock
private ConcreteMyView mockView;
wo ConcreteMyView eine Implementierung von Interface MyView ist, wird der Code reibungslos.
Irgendwelche Hinweise?
Ich sehe, dass Sie in Presenter View als Konstruktorparameter betrachten. Aber Ihre Definition von MyView erstreckt sich nicht von View, also kompiliert sie nicht (kann this.view nicht auf View-Instanz setzen). Ist das ein Tippfehler im Code? – mdewit
Hinweis, wenn ich im Presenter-Konstruktor die Ansicht zu MyView ändere, kompiliert der Testfall und läuft erfolgreich für mich – mdewit