在 Android 中@SmallTest、@MediumTest和@LargeTest注释的目的是什么?

我是Android的新手,我见过使用这些注释的示例代码。例如:

@SmallTest
public void testStuff() {
    TouchUtils.tapView(this, anEditTextView);
    sendKeys("H E L P SPACE M E PERIOD");
    assertEquals("help me.", anEditTextView.getText().toString());
}

该注释实现了什么?


答案 1

这篇博客文章对此进行了最好的解释。基本上,它是以下内容:

testing chart

  1. 小:此测试不与任何文件系统或网络交互。
  2. 中:访问正在运行测试的 Box 上的文件系统。
  3. 大型:访问外部文件系统、网络等。

根据 Android Developers 博客,小型测试应为 100 毫秒<,中型测试< 2 秒,大型测试< 120 秒。

azizbekian的答案显示了如何在运行测试时利用注释。

此外,这个旧的过时页面还有更多信息。具体来说,就是如何将该工具与 .以下是相关部分:am instrumentadb shell


仪器选件

该工具使用 -e 标志,以键值对的形式将测试选项或子类传递给子类,语法如下:am instrumentInstrumentationTestRunner

-e <key> <value>

某些键接受多个值。在逗号分隔的列表中指定多个值。例如,此调用 为键提供多个值:InstrumentationTestRunnerpackage

$ adb shell am instrument -w -e package com.android.test.package1,com.android.test.package2 \
> com.android.test/android.test.InstrumentationTestRunner

下表描述了键值对及其结果。请查看表后面的使用说明。

钥匙 价值 描述
大小 [小|中|大] 运行按大小批注的测试方法。批注是@SmallTest、@MediumTest和@LargeTest。

因此,阅读上述内容,您可以指定如下小测试:

$ adb shell am instrument -w \
>   -e package com.android.test.package1,com.android.test.package2 \
>   -e size small \
>  com.android.test/android.test.InstrumentationTestRunner


答案 2

作为Davidann的答案的补充,主要是OP在评论中提出的问题

在上面代码的上下文中,除了给其他开发人员留下注释之外,它实际上还做了什么吗?它执行什么吗?是否有任何工具可以使用此注释?它在Android开发中的目的是什么?

您可以运行一组使用特定注释进行批注的测试。

来自 AndroidJUnitRunner 文档

运行特定的测试大小,即使用 SmallTest 或 MediumTestLargeTest 进行注释:

adb shell am instrument -w -e size [small|medium|large] com.android.foo/android.support.test.runner.AndroidJUnitRunner

您也可以通过 gradle 设置这些参数:


    android {
        ...
        defaultConfig {
            ...
            testInstrumentationRunnerArgument 'size', 'Large'
        }
    }

Via gradle:

-Pandroid.testInstrumentationRunnerArguments.size=small

有关更多详细信息,请参阅Doug Stevenson博客文章以及此博客文章


推荐