gpt4 book ai didi

android - Activity 单元测试

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:04 26 4
gpt4 key购买 nike

我有一个 Activity 在后台执行一些工作,并根据这项工作的结果启动其他两个 Activity 之一。如何编写单元测试来验证其行为?

我尝试使用 ActivityUnitTestCase,但它在尝试显示进度对话框时崩溃了。使用 ActivityInstrumentationTestCase2 我找不到任何方法来拦截 Activity 破坏。有什么建议吗?

最佳答案

ActivityInstrumentationTestCase2 是正确的方法,因为其他类已弃用。要测试在您的主要 Activity 之后发生了什么,我们将其称为 ProgressActivity,您应该使用 ActivityMonitor .我想你想拦截 Activity 创建,而不是破坏。

我在这里假设 ProgressActivity 启动另一个 Activity(比方说 A1A2A3 ) 在后台完成一些计算之后。

你的测试用例应该是这样的:

public static final HashSet<Class<? extends Activity>> TARGET_ACTIVITIES = new HashSet<Class<? extends Activity>>();
static {
TARGET_ACTIVITIES.add(A1.class);
TARGET_ACTIVITIES.add(A2.class);
TARGET_ACTIVITIES.add(A3.class);
}

private static final int TIMEOUT = 7000;

public void testRandomActivityStarted() {
@SuppressWarnings("unused")
ProgressActivity activity = getActivity();
final Instrumentation inst = getInstrumentation();
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MAIN);
intentFilter.addCategory("MY_CATEGORY");
ActivityMonitor monitor = inst.addMonitor(intentFilter, null, false);
// Wait, before the Activity started
monitor.waitForActivityWithTimeout(TIMEOUT);
assertEquals(1, monitor.getHits());
Activity randomActivity = monitor.getLastActivity();
Log.d(TAG, "monitor=" + monitor + " activity=" + randomActivity);
// Unfortunately, it seems randomActivity is always null even after a match
if ( randomActivity != null ) {
assertTrue(TARGET_ACTIVITIES.contains(randomActivity.getClass()));
}
inst.removeMonitor(monitor);
}

这里的技巧是在 IntentFilter 中使用类别,因为如果您依赖 getLastActivity(),您可能会感到失望,因为它似乎始终为 null。为了能够匹配此类别,您应该在启动 A1A2A3 ( Intent.addCatrgory() )

时使用它

此示例改编自说明 ActivityMonitor 的示例在 Android Application Testing Guide .

关于android - Activity 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9368912/

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