测试基础 android 异步单测无法执行到异步返回的内容,且线程一直处于阻塞状态

叶子 · 2018年03月29日 · 最后由 叶子 回复于 2019年07月19日 · 2334 次阅读

接上次的问题:大家都是怎么实现 android 异步接口测试的呢
根据大家的提示,和网上的各种资料,将代码修改为

public class Test extends InstrumentationTestCase {
    private Activity mActivity;
    private Context mApplicationContext;
    private int error_code = -1;
    private String message;

    private static final String TAG = "MyTest";
    @Override
    protected void setUp() throws Exception {

        super.setUp();
        Intent intent = new Intent();
        intent.setClassName("xxx.xxx.com.test", MainActivity.class.getName());
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        mActivity = (MainActivity) getInstrumentation().startActivitySync(intent);
        mApplicationContext = mActivity.getApplicationContext();
    }
    @Override
    protected void tearDown() throws Exception {
        mActivity.finish();
        try {
            super.tearDown();
        } catch (Exception e) {
            e.printStackTrace();
        }
        super.tearDown();
    }



    public void testLogin() throws Throwable{
        final CountDownLatch signal = new CountDownLatch(1);
        //在UI线程中执行异步操作
        runTestOnUiThread(new Runnable() {
            @Override
            public void run() {
                //我要测试的方法
                A.getInstance().login("ffff", 11, "", "test", new MyManager.CallBack() {
                    @Override
                    public void finish(int code, String msg) {
                        error_code = code;
                        message = msg;
                        signal.countDown();
                        Log.d(TAG, message);
                        Log.d(TAG, error_code + "");

                    }
                });
            }
        });
        //signal.await(10, TimeUnit.SECONDS);
        signal.await();
        assertEquals(1, error_code);
    }

}

执行测试,测试方法一直转圈,且 error_code 一直是-1,中间的 Log.d 也没有被执行到

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 4 条回复 时间 点赞
叶子 大家都是怎么实现 android 异步接口测试的呢 中提及了此贴 03月29日 19:13

妹咋 现在异步测试可以用 Espresso 了, IdlingResource 支持的非常好...不过有时候不太稳定结果,但是对于单元测试来说远远足够了...我目前正在封装 Espresso 和 Junit, 有兴趣可以看看这篇:
Espresso - 详解 Espresso 的 IdlingResource 异步测试

好的,好的,我去了解一下 espresso,非常感谢

LZ,你好,请问异步接口回调结果怎么获取的

阁主夫人 回复

用 CountDownLatch 阻塞当前的线程

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册