Ich habe MVP in meiner Anwendung. Präsentator SchnittstelleMockito Android Unit Test
public interface ILoginPresenter<V> extends Presenter<V> {
void logUserIn(String email, String password, String deviceToken, String deviceType);
}
Realisierung hat RX Einzel
mLoginSubscription = mModel.logUserIn(email, password, deviceToken, deviceType)
.compose(RxUtil.setupNetworkSingle())
.subscribe(new Subscriber<User>() {
@Override
public void onCompleted() {
Timber.i("Log in complete");
}
@Override
public void onError(Throwable e) {
Timber.e(e, "Retrofit could not get User.");
getView().dismissProgressDialog();
}
@Override
public void onNext(UserResponseRetrofit response) {
Timber.i("Retrofit is attempting to get User");
mSaveModel.saveUser(user);
getView().dismissProgressDialog();
getView().goToMenuActivity();
}
});
Auch habe ich Modul für Dagger
@Module
public class ModelModule {
@Provides
@ScreenScope
public ILoginModel provideLoginModel(LoginModel p) {
return p;
}
}
My Unit-Test aussehen nächste:
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21, manifest = "/src/main/AndroidManifest.xml")
public class LoginPresenterTest {
public static final String SOME_OTHER_TOKEN = "someOtherToken";
private AppComponent mAppComponent;
private LoginComponent mLoginComponent;
private ILoginView mockView;
private ModelModule mockModel;
private ILoginPresenter mLoginPresenter;
@Before
public void setup() {
// Creating the mocks
mockView = Mockito.mock(ILoginView.class);
mockModel = Mockito.mock(ModelModule.class);
ILoginModel mock = Mockito.mock(ILoginModel.class);
User urr = Mockito.mock(User.class);
Mockito.when(mockModel.provideLoginModel(null)).thenReturn(mock);
Mockito.when(mock.logUserIn("", "", "", "")).thenReturn(ScalarSynchronousSingle.just(urr));
mAppComponent = DaggerAppComponent.builder()
.appModule(new AppModule(RuntimeEnvironment.application))
.build();
mLoginComponent = DaggerLoginComponent.builder()
.appComponent(mAppComponent)
.modelModule(mockModel)
.presenterModule(new PresenterModule())
.build();
mLoginPresenter = mLoginComponent.provideLoginPresenter();
mLoginPresenter.setView(mockView);
}
@Test
public void testLogin() {
mLoginPresenter.logUserIn("", "", "", "");
try {
java.lang.Thread.sleep(20000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Mockito.verify(mockView).dismissProgressDialog();
}
So verwenden Dolch muss ich Erstelle Moderator korrekt. Zu diesem Zweck versuche ich Mockito.when zu verwenden. Erstens sieht aus wie diese Linie nicht funktioniert
Der Zielzweck ist es, meine eigene Modellrealisierung zu verwenden, die Single zurückgeben.
verstehe nicht wirklich, warum mein ModelModule-Schein nicht funktioniert?
Was meinst du mit funktioniert nicht? Meinst du, dass es deine Spott nicht zurückgibt? Sind Sie sicher, dass der Dolch 'provideLoginModel' mit dem Argument' null' aufruft? Wenn dir das Argument egal ist '' Mockito.when (mockModel.provideLoginModel (any())). ThenReturn (mock); ' – cyroxis
Danke' any() '- ist die Antwort für ein paar andere meine Fragen –
Great I aktualisierte meine Antwort, um zukünftigen Lesern zu helfen. – cyroxis