【问题标题】:Why is a (virtual) device necessary for a unit test based on ActivityUnitTestCase?为什么基于 ActivityUnitTestCase 的单元测试需要(虚拟)设备?
【发布时间】:2013-10-01 00:18:27
【问题描述】:

我想写一个基于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 eclipse unit-testing junit


    【解决方案1】:

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

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

    【讨论】:

    • 这些“单元”测试不会单独测试一个单元;他们测试了所有的Android。始终首先通过启动 AVD 来开始您的工作日。启动后,使用 Package Explorer -> MyTests -> 上下文菜单(“鼠标右键”)-> Debug As -> Debug Configurations -> Target -> “Always Prompt...” -> Debug。当 Android Device Chooser 出现时,选择正在运行的 AVD,然后单击“Use same device for future launch”。然后,在您进行 TDD 时,按 Ctrl+Tab 到 *Test.java 文件,然后点击 F11 重新启动上次配置的运行。这是可能的最快(咳咳)TDD 周期...
    【解决方案2】:

    我误解了 Android 提供的单元测试概念。我希望有一种方法可以在没有(虚拟)设备的情况下编写测试。

    我猜Robolectric 就是我要找的。它提供了与 Android 相同的 API,但没有设备。该设备被嘲笑。想要开发测试驱动的人可能想看看这个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      相关资源
      最近更新 更多