Qual é a finalidade das anotações @SmallTest, @MediumTest e @LargeTest no Android?

99

Eu sou novo no Android e vi código de exemplo usando essas anotações. Por exemplo:

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

O que essa anotação realiza?

Eric Palakovich Carr
fonte

Respostas:

9

Como um complemento à resposta de Davidann e principalmente à pergunta da OP no comentário:

No contexto do código acima, ele realmente FAZ alguma coisa, exceto deixar uma nota para outros desenvolvedores? Isso impõe alguma coisa? Existem ferramentas que utilizam esta anotação? Qual é o seu propósito no desenvolvimento do Android?

Você pode executar um grupo de testes anotados com anotações específicas.

Da documentação do AndroidJUnitRunner :

Executando um tamanho de teste específico, ou seja, anotado com SmallTest ou MediumTest ou LargeTest :

adb shell am instrument -w -e size [pequeno | médio | grande] com.android.foo/android.support.test.runner.AndroidJUnitRunner

Você também pode configurar esses parâmetros por meio do Gradle:


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

Via gradle:

-Pandroid.testInstrumentationRunnerArguments.size=small

Consulte a postagem do blog de Doug Stevenson , bem como esta postagem do blog para obter mais detalhes.

azizbekian
fonte
OK, resumindo, posso executar apenas o conjunto de testes @SmallTest com adb shell am instrument -w -e size small com.android.foo/android.support.test.runner.AndroidJUnitRunner; obrigado
kosiara - Bartosz Kosarzycki
Como especificamos a anotação em um comando gradle? Por exemplo, algo como:./gradlew connectedDebugAndroidTest -size MediumTest
Mr-IDE
@ Mr-IDE, você obteve a resposta?
John
138

Esta postagem do blog explica isso melhor. Basicamente, é o seguinte:

gráfico de teste

  1. Pequeno: este teste não interage com nenhum sistema de arquivos ou rede.
  2. Médio: acessa os sistemas de arquivos na caixa que está executando testes.
  3. Grande: acessa sistemas de arquivos externos, redes, etc.

De acordo com o blog de desenvolvedores Android , um pequeno teste deve levar <100 ms, um teste médio <2s e um teste grande <120s.

Consulte esta página (procure por "@SmallTest") para saber como especificar quais testes devem ser executados.

David Weiser
fonte
13
Entendo (e lembro de ter lido aquele artigo no mês passado). Mas, no contexto do código acima, ele realmente FAZ alguma coisa, exceto deixar uma nota para outros desenvolvedores? Isso impõe alguma coisa? Existem ferramentas que utilizam esta anotação? Qual é o seu propósito no desenvolvimento do Android?
Eric Palakovich Carr
3
@Eric O Android TestRunner permite que você especifique o tamanho dos testes a serem executados.
Cheryl Simon
7
Há um blog mais recente do Google sobre esse assunto: plus.google.com/+AndroidDevelopers/posts/TPy1EeSaSg8
k29
1
@SmallTest está obsoleto
Neon Warge
1
@NeonWarge use import android.support.test.filters. [Pequeno] Teste;
Alexander Sidikov Pfeif