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

叶子 · March 29, 2018 · Last by 叶子 replied at July 19, 2019 · 1680 hits

接上次的问题:大家都是怎么实现 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 条回复 时间 点赞

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

叶子 #3 · March 30, 2018 作者

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

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

叶子 #5 · July 19, 2019 作者
阁主夫人 回复

用CountDownLatch阻塞当前的线程

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up