Como executar testes JUnit com Gradle?

95

Atualmente, tenho o seguinte arquivo build.gradle :

apply plugin: 'java'

sourceSets {
    main {
        java {
            srcDir 'src/model'
        }
    }
}

dependencies {
    compile files('libs/mnist-tools.jar', 'libs/gson-2.2.4.jar')
    runtime fileTree(dir: 'libs', include: '*.jar')
}    


Este arquivo build.gradle é para o meu repositório aqui . Todos os meus arquivos principais estão em src / model / e seus respectivos testes estão em test / model .

Como adiciono uma dependência JUnit 4 corretamente e, em seguida, executo esses testes nas pastas de testes / modelo ?

Wang-Zhao-Liu QM
fonte

Respostas:

104

Como adiciono uma dependência junit 4 corretamente?

Supondo que você esteja resolvendo em um repositório Maven (ou equivalente) padrão:

dependencies {
    ...
    testCompile "junit:junit:4.11"  // Or whatever version
}

Executar esses testes nas pastas de testes / modelo?

Você define seu conjunto de origem de teste da mesma maneira:

sourceSets {
    ...

    test {
        java {
            srcDirs = ["test/model"]  // Note @Peter's comment below
        }
    }
}

Em seguida, invoque os testes como:

./gradlew test

EDITAR: se você estiver usando o JUnit 5, há mais etapas a serem concluídas, você deve seguir este tutorial .

Oliver Charlesworth
fonte
8
srcDirs = ["test/model"]é um pouco mais preciso porque elimina o diretório de fontes de teste padrão, enquanto srcDir "test/model"adiciona outro diretório. O mesmo para o mainconjunto de origem.
Peter Niederwieser
47

Se você configurar seu projeto com a estrutura de pacote gradle padrão, ou seja:

src/main/java
src/main/resources
src/test/java
src/test/resources

então você não precisará modificar sourceSets para executar seus testes. O Gradle descobrirá se suas classes e recursos de teste estão em src / test. Você pode então executar como Oliver disse acima. Uma coisa a ser observada: tenha cuidado ao definir arquivos de propriedades e executar suas classes de teste com o gradle e com o IDE. Eu uso o Eclipse e, ao executar o JUnit a partir dele, o Eclipse escolhe um caminho de classe (o diretório bin), enquanto o gradle escolhe outro (o diretório de construção). Isso pode causar confusão se você editar um arquivo de recurso e não vir sua alteração refletida no tempo de execução do teste.

DivDiff
fonte
2
Para direcionar os arquivos de construção do Eclipse para o mesmo diretório do Gradle (pode evitar alguns erros frustrantes): Projeto -> Propriedades -> Caminho de construção Java -> Pasta de saída padrão: substitua "bin" por "construção". No entanto ... na minha experiência, isso parece ter o hábito desconcertante de "escorregar de volta" para a "caixa" padrão de vez em quando de forma inesperada. Seria bom saber se existe uma maneira de fazer o Eclipse usar "build" por padrão.
mike roent
2
@ mike-roedor, tanto quanto eu sei, é explicitamente desencorajado a compartilhar o mesmo caminho de construção para eclipse e gradle (ver, por exemplo, discuss.gradle.org/t/… )
mtraut
OK, estou corrigido! ... e suponho que não há nada a ganhar compilando para o mesmo diretório. Para a maioria dos propósitos, a funcionalidade do criador do eclipse torna-se uma mera ferramenta de validação: "opa, isso não compilará por causa de x, y e z".
mike roent
1
@DivDiff minha estrutura de pastas src é configurada da mesma maneira mencionada acima, mas ainda quando eu faço o teste Gradle, ele não faz nada. Ele não executa meus testes. Qualquer ideia?
Gaurav
@Gaurav, convidei você para um chat para que possamos conversar sobre isso offline.
DivDiff
15

Se você criou seu projeto com Spring Initializr , tudo deve ser configurado corretamente e tudo o que você precisa fazer é executar ...

./gradlew clean test --info
  • Descarte --infose você não quiser ver a saída do teste.
  • Desative cleanse não quiser executar novamente os testes que já foram aprovados desde a última alteração.

Dependências necessárias build.gradlepara teste no Spring Boot ...

dependencies {
    compile('org.springframework.boot:spring-boot-starter')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

Por algum motivo, o executor de teste não informa isso, mas produz um relatório HTML em build/reports/tests/test/index.html.

Brent Bradburn
fonte