android - 为什么基于 ActivityUnitTestCase 的单元测试需要(虚拟)设备?

标签 android eclipse unit-testing junit

我想基于 android.test.ActivityUnitTestCase 编写一个简单的单元测试。由于测试很简单,我希望执行时间非常短。但测试至少需要 6 秒。

该测试测试 Google 教程中的一个简单应用程序。这是我的测试:

public class MainActivityUnitTest extends ActivityUnitTestCase<MainActivity> {

    public MainActivityUnitTest() {
        super(MainActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        Intent intent = new Intent(getInstrumentation().getTargetContext(),
                MainActivity.class);
        startActivity(intent, null, null);
    }

    public void testNextActivityWasLaunchedWithIntent() {
        Button sendButton =
                (Button) getActivity()
                .findViewById(com.bjoerne.aroundtheworldvisualizer.R.id.send);
        sendButton.performClick();

        Intent intent = getStartedActivityIntent();
        assertNotNull("Intent was null", intent);
        final String payload =
                intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
        assertEquals("", payload);
    }
}

我在 Eclipse 中选择了“Run as -> Android JUnit Test”。那是对的吗?但随后似乎需要一个 android 虚拟设备 (AVD)。如果 AVD 尚未启动,则会启动它进行测试(测试需要一分钟)。但即使 AVD 已经在运行,它似乎在执行测试之前已被检查或初始化,这需要几秒钟。

我不需要 ActivityUnitTestCase 的运行 AVD,对吗?有没有办法加速测试执行?

最佳答案

您需要某种设备来运行测试。 Android JUnit 测试是一个 Android 应用程序,而 Android 应用程序需要在其中运行的 Android 系统。 Android 测试不会在您工作站的 VM 中运行,它必须在 Android VM 中运行。要在 Android VM 中运行测试,您必须将其安装在 Android 环境中。运行测试的一种方法是在 Android 物理设备上安装测试。另一种运行测试的方法是创建一个 AVD,这是 Android 模拟器的配置,然后在模拟器中运行测试。

您看到的时间延迟可能是模拟器启动的延迟。启动后,再次运行测试可能会更快,但不如在真实设备上运行测试快。

关于android - 为什么基于 ActivityUnitTestCase 的单元测试需要(虚拟)设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19105996/

相关文章:

java - 一次定义多个类@Deprecated

python - 如何使用 Mock 框架更改模拟方法的输出?

java - Eclipse Java 单元测试

android - 如何检测 Android 是否具有完整的 USB 支持?

android - Android API 指南对我来说有点不清楚 android :onClick XML attribute

linux - 在 Linux 中以不同用户身份在 Eclipse 中运行 Tomcat

Python unittest 和 mock : Check if a function gets called, 然后停止测试

java - LibGDX中如何暂停定时器delaySeconds

java - 如何在appium测试中按顺序在两台设备上运行测试用例

android - 如何使用 eclipse 从 cordova android 3.2 升级到 3.3?