使用 Retrofit2 和 Mockito 或 Robolectric 进行 Android 单元测试

Android Unit Test with Retrofit2 and Mockito or Robolectric(使用 Retrofit2 和 Mockito 或 Robolectric 进行 Android 单元测试)
本文介绍了使用 Retrofit2 和 Mockito 或 Robolectric 进行 Android 单元测试的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我可以测试retrofit2beta4 的真实反应吗?我需要 Mockito 还是 Robolectic?

Can I test real response from retrofit2beta4? Do i need Mockito or Robolectic?

我的项目中没有活动,它将是一个库,我需要测试服务器是否正确响应.现在我有这样的代码并卡住了......

I don't have activities in my project, it will be a library and I need to test is server responding correctly. Now I have such code and stuck...

@Mock
ApiManager apiManager;

@Captor
private ArgumentCaptor<ApiCallback<Void>> cb;

@Before
public void setUp() throws Exception {
    apiManager = ApiManager.getInstance();
    MockitoAnnotations.initMocks(this);
}

@Test
public void test_login() {
    Mockito.verify(apiManager)
           .loginUser(Mockito.eq(login), Mockito.eq(pass), cb.capture());
    // cb.getValue();
    // assertEquals(cb.getValue().isError(), false);
}

我可以做出虚假的回应,但我需要测试真实的.是成功吗?身材对吗?你能帮我写代码吗?

I can make fake response, but I need to test real. Is it success? Is it's body correct? Can you help me with code?

推荐答案

答案比我想象的要简单:

The answer is too easy than i expected:

使用 CountDownLatch 让您的测试等到您调用 countDown()

Using CountDownLatch makes your test wait until you call countDown()

public class SimpleRetrofitTest {

private static final String login = "your@login";
private static final String pass = "pass";
private final CountDownLatch latch = new CountDownLatch(1);
private ApiManager apiManager;
private OAuthToken oAuthToken;

@Before
public void beforeTest() {
    apiManager = ApiManager.getInstance();
}

@Test
public void test_login() throws InterruptedException {
    Assert.assertNotNull(apiManager);
    apiManager.loginUser(login, pass, new ApiCallback<OAuthToken>() {
        @Override
        public void onSuccess(OAuthToken token) {
            oAuthToken = token;
            latch.countDown();
        }

        @Override
        public void onFailure(@ResultCode.Code int errorCode, String errorMessage) {
            latch.countDown();
        }
    });
    latch.await();
    Assert.assertNotNull(oAuthToken);
}

@After
public void afterTest() {
    oAuthToken = null;
}}

这篇关于使用 Retrofit2 和 Mockito 或 Robolectric 进行 Android 单元测试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How can I use CClistview in COCOS2d Android?(如何在 COCOS2d Android 中使用 CClistview?)
cocos2d-android: how to display score(cocos2d-android:如何显示分数)
Sqlite database not copied from asset folder Android(Sqlite 数据库未从资产文件夹 Android 复制)
SQLite Database Copy Appears Corrupted When Generated by Device and not Emulator(SQLite 数据库副本在由设备而不是模拟器生成时出现损坏)
Android file copy(安卓文件拷贝)
Android how to detect Copy event of Edittext in android(Android如何在android中检测Edittext的Copy事件)