Pergunta

Atualmente, estou usando JUnit 4 e ter uma necessidade de dividir meus testes em grupos que podem ser executados seletivamente em qualquer combinação. Eu sei TestNG tem um recurso para testes de anotar a atribuí-los a grupos, mas não posso migrar para TestNG agora. Parece que esta poderia ser facilmente realizado em JUnit com algumas anotações personalizadas e um costume JUnit TestRunner. Eu verifiquei ambos os docs JUnit e procurou na web, mas não conseguiu encontrar tal coisa a. Alguém tem conhecimento de tal TestRunner?

Update: Obrigado pelas suas respostas sobre conjuntos de testes. Eu deveria ter abordado estes em minha pergunta original. Aqui vamos nós: Eu não quero usar conjuntos de testes porque exigiria-me para criar manualmente e gerenciá-los, o que significa que tocam em todos os meus testes e organizando-os em suites manualmente (muito trabalho e um pesadelo de manutenção). Tudo que eu preciso fazer é executar todos os testes de unidade, exceto alguns que são realmente testes de integração. Então, eu quero anotar estes, e executar todos os outros. Em outros momentos, quero apenas executar os testes de integração. Eu também tenho a necessidade de colocar um teste de unidade em vários grupos, que não é possível com suites. Espero que isso ajude a esclarecer as coisas.

Update 2:. Se JUnit não tem esta OOB, eu estou procurando uma biblioteca Open Source que adiciona isso para JUnit (anotações + costume JUnit Test Runner)

Foi útil?

Solução

Confira Spring SpringJUnit4ClassRunner . Eu usei-o para testes opcionalmente executados com base em uma propriedade do sistema, usando o IfProfileValue anotação.

Este:

@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"})
  public void testWhichRunsForUnitOrIntegrationTestGroups() {
      // ...
 }

será executado se o sistema de propriedade 'test-grupos' está definido para 'Unidade-testes' ou 'integração-testes'.

Update: JUnitExt tem @Category e @Prerequisite anotações e parece que ele deve fazer o que você precisa. No entanto, eu nunca usei isso sozinho, então eu não posso garantir isso.

Outras dicas

JUnit não tem esse corredor no momento. Abordar a questão subjacente, a necessidade de obter garantias suficientes de um conjunto de testes em uma quantidade limitada de tempo, é a nossa maior prioridade de desenvolvimento para a próxima versão. Enquanto isso, a implementação de um filtro que funciona através de anotações parece que ele não seria um projeto grande, embora eu estou tendenciosa.

Em primeiro lugar, você está abordando dois problemas - testes de unidade (muitas vezes no mesmo pacote como a unidade em teste) e testes de integração. Eu costumo manter meus testes de integração em um pacote separado, algo como com.example.project.tests. No eclipse, meus projetos parecido:

project/
  src/
    com.example.project/
  tsrc/
    com.example.project/
    com.example.project.tests/

clique com o botão direito do mouse em um pacote e selecionando 'run' executa os testes no pacote; fazendo o mesmo na pasta de origem executa todos os testes.

Você pode acheive um efeito semelhante, embora você expressa um desinteresse nele, usando o Suíte corredor . No entanto, isso viola a seco - você tem que manter cópias dos nomes de teste até à data nas aulas privadas. No entanto, você pode facilmente colocar o mesmo teste em várias suites.

@RunWith(Suite.class)
@Suite.SuiteClasses( { 
    TestAlpha.class, 
    TestBeta.class })
public class GreekLetterUnitTests {
}

É claro, eu realmente deve manter essas coisas automatizadas. Um bom método para fazer isso é usar a tarefa Ant .

<target name="tests.unit">
  <junit>
    <batchtest>
      <fileset dir="tsrc">
        <include name="**/Test*.java"/>
        <exclude name="**/tests/*.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>
<target name="tests.integration">
  <junit>
    <batchtest>
      <fileset dir="tsrc">
        <include name="**/tests/Test*.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>

Não, não existe um conceito semelhante a grupos TestNG, infelizmente. Foi planejado para JUnit4, mas por alguma razão obscura, foi retirado do planejamento.

Você pode criar suites, embora que coloca toda a configuração na suíte, e não em anotações.

JUnit 3 permite criar test-suites que podem ser executados como qualquer outro teste. não JUnit 4 têm um conceito similar?

Se você estiver usando ANT ou Maven, você pode controlar quais testes são executados por filtrar os testes pelo nome. Um pouco estranho, mas pode funcionar para você.

TestNG tem o meu voto. É de anotação com base, pode ser executado como Grupos, testes individuais, etc, podem ser ligados em Maven, e pode executar todos os testes JUnit como parte de seu execuções de teste.

Eu recomendo-o sobre JUnit.

meu conselho é simplesmente vala JUnit e usar TestNG. Uma vez que você se acostumar com TestNG, JUnit parece Stone Age.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top