久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

使用 Mockito 進行 Retrofit 2 api 調用的單元測試

Unit Test of Retrofit 2 api call with Mockito(使用 Mockito 進行 Retrofit 2 api 調用的單元測試)
本文介紹了使用 Mockito 進行 Retrofit 2 api 調用的單元測試的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我需要一些關于如何模擬 rest api 的建議.我的應用程序采用 MVP 架構.

I need some advices on how to mock a rest api. My application is in MVP architecture.

我的 API 接口:

public interface MyAPI {

    @GET("{cmd}/{userName}/{password}")
    Observable<Response> login(
        @Path("cmd") String cmd,
        @Path("userName") String userName,
        @Path("password") String password
    );

我的服務:

public class MyService implements IService {

    private static MyService mInstance = new MyService();
    private MyAPI mApi;

    public static MyService getInstance() {
        return mInstance;
    }

    private MyService() {

        OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
        httpClientBuilder.connectTimeout(Config.DEFAULT_TIMEOUT, TimeUnit.SECONDS);

        Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Config.kBaseUrl)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .client(httpClientBuilder.build())
            .build();

        this.mApi = retrofit.create(MyAPI.class);
    }

    public void login(
        Subscriber<Response> subscriber,
        String userName,
        String password) {
        mApi.login(Config.kLoginCmd,userName,password)
            .subscribeOn(Schedulers.io())
            .unsubscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(subscriber);
    }

我的演講者班級:

public class LoginPresenter implements LoginContract.Presenter {

    LoginContract.View mView;
    IService mService;
    ISession mSession;

    public LoginPresenter(LoginContract.View loginView, IService service, ISession session) {
        mView = loginView;
        mService = service;
        mSession = session;
    }

    @Override
    public void login(String email, String password) {

        Subscriber<Response> subscriber = new Subscriber<Response>() {
            @Override
            public void onCompleted() {
                mView.showLoading(false);
            }

            @Override
            public void onError(Throwable e) {
                mView.showError(e.getLocalizedMessage());
            }

            @Override
            public void onNext(Response response) {
                if (response.getResults().getStatus().equalsIgnoreCase(Config.kResultCodeOK)) {
                    mView.loginSuccess();
                } else {
                    mView.showError(response.getResults().getStatus().getErrmsg());
                }
            }
        };

        mView.showLoading(true);
        mService.login(
            subscriber,
            email,
            password);
    }

還有另一種方法可以通過編寫模擬服務來測試我的演示者.但我不太喜歡這樣,我認為 Mockito 可以提供幫助.

There is another way to test my presenter by writing a Mock service. But I don't like that so much and I think Mockito could help.

這是我的測試類:

public class LoginPresenterMockTest {

    private LoginPresenter mLoginPresenter;

    @Mock
    LoginContract.View view;
    @Mock
    IService service;
    @Mock
    ISession session;

    @Before
    public void setup() throws Exception {
        MockitoAnnotations.initMocks(this);
        mLoginPresenter = new LoginPresenter(view, service, session);
    }

    @Test
    public void testLoginWithCorrectUserNameAndPassword() throws Exception {
        mLoginPresenter.login("user@email.com","password");
        verify(view).loginSuccess();
    }

}

我想做的是在響應正確時模擬響應數據調用 loginSuccess().

What I want to do is I mock the response data call loginSuccess() when the response is correct.

當然,我目前的測試不會奏效.我需要一些關于如何模擬這個的建議?任何的想法?謝謝.

Of course my current test will not work. I need some advices on how to mock this? Any idea? Thanks.

推薦答案

你可以用下一個方法:

@Test
public void testLoginWithCorrectUserNameAndPassword() throws Exception {
    // create or mock response object
    when(service.login(anyString(), anyString(), anyString).thenReturn(Observable.just(response));
    mLoginPresenter.login("user@email.com","password");
    verify(view).loginSuccess();
}

@Test
public void testLoginWithIncorrectUserNameAndPassword() throws Exception {
    // create or mock response object
    when(service.login(anyString(), anyString(), anyString).thenReturn(Observable.<Response>error(new IOException()));
    mLoginPresenter.login("user@email.com","password");
    verify(view).showError(anyString);
}

這篇關于使用 Mockito 進行 Retrofit 2 api 調用的單元測試的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

EditText: Disable Paste/Replace menu pop-up on Text Selection Handler click event(EditText:禁用文本選擇處理程序單擊事件上的粘貼/替換菜單彈出)
Multiline EditText with Done SoftInput Action Label on 2.3(2.3 上帶有完成 SoftInput 操作標簽的多行 EditText)
How to detect the swipe left or Right in Android?(如何在 Android 中檢測向左或向右滑動?)
Prevent dialog dismissal on screen rotation in Android(防止在Android中的屏幕旋轉對話框解除)
How do I handle ImeOptions#39; done button click?(如何處理 ImeOptions 的完成按鈕點擊?)
How do you set EditText to only accept numeric values in Android?(您如何將 EditText 設置為僅接受 Android 中的數值?)
主站蜘蛛池模板: 日韩中文一区二区三区 | 嫩呦国产一区二区三区av | 国产区一区二区三区 | 日日躁狠狠躁aaaaxxxx | 欧美日韩国产在线 | 9999精品视频 | 免费在线观看一区二区 | 免费视频一区二区 | 国产精品久久国产精品 | 一区二区三区四区免费在线观看 | 午夜影院网站 | 中文字幕av在线播放 | 欧美一级久久 | 在线看无码的免费网站 | 美国一级黄色片 | 噜啊噜在线 | 亚洲国产69| 日韩和的一区二区 | 久久精品欧美一区二区三区不卡 | 国产成人精品综合 | 国产伊人久久久 | 日韩在线观看 | 欧美一级片在线播放 | 黄色网址大全在线观看 | 亚洲国产成人精品久久 | 一本一道久久a久久精品蜜桃 | 国产福利在线 | 欧美日韩精品 | 在线伊人网 | 日韩欧美国产精品 | 中文字幕成人 | 日日操天天射 | 成人 在线 | 亚洲天天 | 亚洲视频在线观看一区二区三区 | 久久国产精品久久久久久久久久 | 天天视频一区二区三区 | 久久久中文 | 亚洲欧美中文日韩在线v日本 | 老熟女毛片 | 嫩草一区二区三区 |