如何在android(MVP)上测试演示者?

如何在android(MVP)上测试演示者?,android,testing,mvp,Android,Testing,Mvp,我以前从未创建过单元测试。我计划为我的演示者和数据源创建UI测试和单元测试。我在我的应用程序中使用改型、RxJava和Dagger 这是我到目前为止试过的 数据源(我的数据源来自API) 我在设备上运行此应用程序没有问题,但我无法使其在测试中正常工作 知道如何修复演示者测试吗?我做得对吗 如何测试我的数据源?我不知道如何测试这个 谢谢您您还必须: dataSource.getNews()在以下情况下使用Mockito: e、 g 因此,您必须将测试代码引入成功回调,并检查调用了哪些方法。 厄洛尔

我以前从未创建过单元测试。我计划为我的演示者和数据源创建UI测试和单元测试。我在我的应用程序中使用改型、RxJava和Dagger

这是我到目前为止试过的

数据源(我的数据源来自API)

我在设备上运行此应用程序没有问题,但我无法使其在测试中正常工作

知道如何修复演示者测试吗?我做得对吗

如何测试我的数据源?我不知道如何测试这个


谢谢您

您还必须:

dataSource.getNews()在以下情况下使用Mockito:

e、 g

因此,您必须将测试代码引入成功回调,并检查调用了哪些方法。
厄洛尔案件也是如此。

保持简单。您正在测试演示者,而不是数据源。将新方法添加到演示者以获得成功和错误响应。然后添加两个测试:一个测试成功,一个测试错误

    @Override
    public void getNews() {
        view.setLoading(true);

        dispossable = dataSource.getNews(new DataSourceContract.Callback<NewsResponse>() {
            @Override
            public void onSuccess(NewsResponse responseData) {
                onSuccessNewsResponse(responseData);
            }

            @Override
            public void onFailure(Throwable e) {
                onErrorNewsResponse(e);
            }
        });
    }
错误测试:

@Test
public void getNewsError() {
    presenter.onErrorNewsResponse(your_error);
    Mockito.verify(...);
}

我尝试返回回调,但错误仍然相同,应该实现哪个接口?RxJava还是我的自定义回调?当(dataSource.getNews(new Contract.Callback(){onSuccess()onFailure()})).thenReturn(new DisposableObserver(){onNext()onError()onComplete()});我试过你的&它很有效,我仍然认为,我需要测试我的数据源吗?
public class MainPresenterTest {
    @Mock
    DataSource dataSource;

    @Mock
    MainContract.View view;

    MainContract.Presenter presenter;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        presenter = new MainPresenter(view, dataSource);
    }

    @Test
    public void getNews() throws Exception {
        List<Article> articleList = new ArrayList<>();
        presenter.getNews();
        Mockito.verify(view, Mockito.only()).getNewsSuccess(articleList);
    }
}
Wanted but not invoked:
view.getNewsSuccess([]);
-> at com.java.mvp.view.main.MainPresenterTest.getNews(MainPresenterTest.java:37)
when(dataSource.getNews()).thenReturn(new SuccessCallback());
    @Override
    public void getNews() {
        view.setLoading(true);

        dispossable = dataSource.getNews(new DataSourceContract.Callback<NewsResponse>() {
            @Override
            public void onSuccess(NewsResponse responseData) {
                onSuccessNewsResponse(responseData);
            }

            @Override
            public void onFailure(Throwable e) {
                onErrorNewsResponse(e);
            }
        });
    }
@Test
public void getNewsSuccess() {
    presenter.onSuccessNewsResponse(your_response); 
    Mockito.verify(...);
}
@Test
public void getNewsError() {
    presenter.onErrorNewsResponse(your_error);
    Mockito.verify(...);
}