1

我想写一个基于 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,对吗?有没有办法加速测试执行?

4

2 回答 2

1

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

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

于 2013-10-01T02:41:30.197 回答
0

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

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

于 2013-10-18T08:36:24.093 回答