gpt4 book ai didi

java - 等待回调而不阻塞主线程

转载 作者:行者123 更新时间:2023-12-01 22:18:28 25 4
gpt4 key购买 nike

我陷入困境,很高兴得到任何帮助!

我正在为 Android 库编写测试。任务是在 Activity 中执行一些操作并检查库是否正确响应。我的问题是,我的测试在 Activity 中的所有操作完成后立即完成,但我通过回调获得测试结果(并且仅当测试结束时我才收到此回调)。因此,我想以某种方式告诉测试框架,直到收到回调(或直到时间用完),测试才结束。这是我现在拥有的:

@Test
public void testSimpleSetup() {

/* ... */

InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
testManager.startTest(MAX_WAIT_TIME); // this object calls onTestResult(boolean) after time t (t <= MAX_WAIT_TIME)

/* working with activity here */
}
});
InstrumentationRegistry.getInstrumentation().waitForIdleSync();
}

@Override
public void onTestResult(boolean passed) {
// assertTrue(passed);
Assert.fail();
}

我预计此测试会失败,但实际上 onTestResult 是在 testSimpleSetup 完成后调用的,并且 Assert 对测试结果没有影响。

提前致谢。

最佳答案

检查this post 。我修改了一些代码,因为我读了 following :

As in the one argument version, interrupts and spurious wakeups are possible, and this method should always be used in a loop:

Object mon = new Object(); //reference in your Activity
boolean testOnGoing = true;
/*...*/

InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
synchronized (mon) {
testManager.startTest(MAX_WAIT_TIME);
/* working with activity here */
while(testOnGoing)
mon.wait();
}
}
});

InstrumentationRegistry.getInstrumentation().waitForIdleSync();
}

@Override
public void onTestResult(boolean passed) {
synchronized (mon) {
//assertTrue(passed);
Assert.fail();
testOnGoing = false;
mon.notify();
}
}

关于java - 等待回调而不阻塞主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30466163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com