Pergunta

No trabalho atualmente, estamos ainda usando JUnit 3 para executar nossos testes.Temos vindo a considerar mudar para o JUnit 4 para novo testes de ser escrito, mas eu fiquei de olho no TestNG por um tempo agora.Que experiências vocês tiveram todos com JUnit 4 ou TestNG, e que parece funcionar melhor para números muito grandes de testes?Ter flexibilidade na escrita de testes é também importante para nós, pois nossos testes funcionais abrangem um aspecto amplo e precisa ser escrito em uma variedade de maneiras para se obter os resultados.

Velho testes não irá ser re-escrita como eles fazem seu trabalho muito bem.O que eu gostaria de ver em novos testes, porém, é a flexibilidade em forma, o teste pode ser escrito, natural de afirmações, de agrupamento, e facilmente distribuídas as execuções de teste.

Foi útil?

Solução

Eu usei tanto, mas tenho que concordar com o Justin Padrão que você realmente não deve considerar reescrever os testes existentes para qualquer novo formato.Independentemente da decisão, é bastante trivial para executar tanto.TestNG esforça-se para ser muito mais configurável que JUnit, mas no final ambos funcionam igualmente bem.

TestNG tem uma característica interessante, onde você pode marcar testes de um determinado grupo e, em seguida, facilmente executar todos os testes de um grupo específico, ou excluir os testes de um determinado grupo.Assim, você pode marcar os testes que são executados lentamente, como no "lento" do grupo e, em seguida, ignorá-los quando você quiser resultados rápidos.Uma sugestão de que a documentação é a marca de algum subconjunto como "checkin" testes que devem ser executados sempre que você verificar os novos arquivos.Eu nunca vi um recurso em JUnit, mas, novamente, se você não tiver, você REALMENTE não pode perder.

Para todas as suas pretensões de configuração alta, eu fiz correr para um canto a um par de semanas atrás, onde eu não poderia fazer o que eu queria fazer...Eu gostaria de lembrar o que ele é, mas eu queria trazer-lo assim que você sabe que ele não é perfeito.

A maior vantagem TestNG tem é de anotações...que JUnit adicionado na versão 4, de qualquer maneira.

Outras dicas

Primeiro eu gostaria de dizer, não reescrever todos os testes apenas para atender o mais recente modismo.Junit3 funciona perfeitamente bem, e a introdução das notas nos 4 não comprar muito (na minha opinião).É muito mais importante do que vocês escrever testes, e parece que você o faça.

Use o que parece mais natural e ajuda você a fazer o seu trabalho.

Eu não posso comentar sobre TestNG b/c que eu não tenho usado.Mas eu recomendo unitils, um grande wrapper para JUnit/TestNG/o dbunit/EasyMock, independentemente do caminho que você toma.(Ele suporta todos os sabores mencionados acima)

Cerca de um ano atrás, tivemos o mesmo problema.Eu passei algum tempo a considerar o que move estava melhor, e finalmente percebemos que TestNG não tem 'killer recursos".É bom, e tem algumas características JUnit 4 não tem, mas nós não precisamos deles.
Nós não queremos que as pessoas se sentem desconfortáveis escrever testes ao mesmo tempo, conhecer TestNG porque queríamos manter a escrever um monte de testes.
Também, JUnit é praticamente o padrão de facto no mundo Java.Não há nenhuma ferramenta decente que não apoiá-lo da caixa, você pode encontrar um monte de ajuda na web e eles adicionaram uma série de novos recursos, no ano passado, o que mostra que ele está vivo.

Decidimos ficar com JUnit e nunca olhou para trás.

TestNG maiores tirar cartas para me incluir o seu apoio a grupos de teste, e mais importante - teste do grupo de dependências (marcação de um teste como sendo dependente de um grupo faz com que os testes para simplesmente ignorar a execução quando o dependente de grupo falha).

TestNG outras grandes tirar cartas para me incluir parâmetros de teste, provedores de dados, de anotação de transformadores, e mais do que tudo - a vibrante e ágil comunidade de usuários.

Enquanto na superfície pode não acho que todas TestNGs características acima podem não ser necessários, uma vez que você começar a perceber a flexibilidade trazer para o seu teste, você vai saber como você lidou com JUnit.

(disclaimer - eu não usado JUnit 4.x em tudo isso, sou incapaz de realmente comentar sobre os avanços recursos novos ou não).

Felicidades a todos os acima.Algumas outras coisas que eu, pessoalmente, achei que eu gosto mais em TestNG são:

  1. O @BeforeClass para TestNG tem lugar após a criação de classes, para que você não está restrita apenas por ser capaz de chamar métodos estáticos da classe em ti.

  2. Paralela e com parâmetros de testes, talvez eu simplesmente não consigo ter o suficiente de uma vida...mas acabei de receber um chute de escrever um conjunto de Selênio testes, aceitando o nome de um controlador como um parâmetro.Em seguida, a definição de 3 de teste em paralelo grupos, 1 para o IE, FF e Chrome drivers, e assistindo a corrida!Originalmente, eu fiz 4, mas muitas das páginas que eu trabalhei em quebrar o HtmlUnit driver para uma razão ou outra.

Sim, provavelmente terá que encontrar o que a vida.;)

Eu queria compartilhar o que eu encontrei hoje.Achei built-in com parâmetros corredor é bastante rudimentar em Junit4 como comparar o TestNG (eu sei que cada quadro tem os seus pontos fortes, mas ainda assim).O Junit4 anotação @parâmetros é restrito a um conjunto de parâmetros.Eu encontrei este problema durante os testes válidos e inválidos comportamento para a funcionalidade na mesma classe de teste.Assim, a primeira público, estático anotada método que encontrar vai ser usado, mas pode encontrá-los em qualquer ordem.Isso faz com que a gente escreva classes diferentes desnecessariamente.No entanto TestNG fornece maneira limpa para fornecer diferentes tipos de provedores de dados para cada método.Assim podemos testar a mesma unidade de código válido e inválido forma na mesma classe de teste colocando o válido/inválido de dados separadamente.Eu irei com TestNG.

Também mais uma vantagem do TestNG é o suporte de testes em paralelo.Em nossa era de ou multicores é importante, eu acho.

Eu também usei ambos os quadros.Mas eu usando o hamcrest para assertations.Hamcrest permite que você facilmente gravar seu próprio método de declaração.Assim, em vez de

assertEquals(operation.getStatus(), Operation.Status.Active);

Você pode escrever

assertThat(operation, isActive());

Que dá a você a oportunidade de utilização de maior nível de abstração em seus testes.E isso torna os testes mais robustos.

Um par de adições a Pedra de Mike resposta:

1) O mais freqüente coisa que eu use TestNG grupos é quando quero executar um único método de teste em um conjunto de teste.Eu simplesmente adicionar este teste para o grupo "phil" e, em seguida, executar este grupo.Quando eu estava usando JUnit 3, gostaria de comentar as entradas para todos os métodos, mas o que eu queria correr na "suite" método, mas comumente se esqueça de descomente-as antes do check-in.Com os grupos, eu não tenho mais esse problema.

2) Dependendo da complexidade dos testes, migração de testes de JUnit3 para TestNG pode ser feito automaticamente com um pouco de sed e criar uma classe base para substituir TestCase que estático importa todas as TestNG afirmar métodos.

Eu tenho informações sobre o meu migração do JUnit para TestNG aqui e aqui.

JUnit 4 Vs TestNG – Comparação por mkyong.com ( atualizada em 2013).

Conclusão:Eu sugiro usar o TestNG como núcleo de estrutura de teste de unidade para o projeto Java, porque TestNG é mais avançar na parametrização de testes, teste de dependência e suite de testes (Agrupamento de conceito).

TestNG é destinado funcionais, testes de alto nível e complexa integração de teste.Sua flexibilidade é especialmente útil com grandes conjuntos de teste.

Além disso, TestNG também abrangem todo o núcleo JUnit4 funcionalidade.É só não há razão para mim para usar o JUnit mais.

In simple terms, TestNG = JUnit + lot more...So, Why debate ? go and grab TestNG :-)

Você pode encontrar mais detalhada comparação aqui.

Eu gosto do puro e a fácil integração do TestNG com Guice.

Sua pergunta parece dois dobrado para mim.Num tinha você gostaria de comparar duas estruturas de teste, por outro lado, você gostaria de implementar testes fácil, natural, afirmações, etc...

Ok, em primeiro lugar JUnit foi brincando de pique com TestNG em termos de funcionalidade, eles têm a ponte que alguns com v4, mas não o suficiente, na minha opinião.Coisas como anotações e dataproviders são ainda muito melhor em TestNG.Eles também são mais flexíveis em termos de execução do teste, uma vez que TestNG tem teste de dependência, de agrupamento e de ordenação.

JUnit ainda requer certos antes e depois do métodos estático, o que limita o que você pode fazer antes da execução dos testes, TestNG nunca tem esse problema.

No TBH, principalmente as diferenças entre os dois quadros não significa muito, a menos que o seu foco sobre a integração/automação de testes.JUnit a partir de minha experiência é construído a partir do zero para o teste de unidade e agora está sendo empurrado em direção a níveis mais elevados de testes, que IMO torna a ferramenta errada para o trabalho.TestNG faz bem em testes de unidade e, devido à sua robusta dataproviding e grande execução do teste de habilidades, funciona ainda melhor em integração/automação de teste de nível.

Agora para o que eu acredito é um problema separado, como escrever bem estruturado, legível e de fácil manutenção testes.Mais do que isso eu tenho certeza que você sabe, mas em coisas como a Padrão De Fábrica, Padrão De Comando e PageObjects (se o seu teste de sites) são vitais, é muito importante ter uma camada de abstração entre o que o seu teste (SUT) e que o teste real é (afirmações da lógica de negócio).Para ter muito mais agradável afirmações, você pode usar Hamcrest.Fazer uso do ingresso herança/interfaces para reduzir a repetição e a impor a semelhança.

Quase me esqueci, também uso o Dados De Teste Construtor Padrão, este, juntamente com o TestNG do provedor de dados de anotação é muito útil.

Minha opinião sobre o que faz o TestNG realmente muito mais poderoso:

1.  JUnit still requires the before/after class methods to be static, which limits
    what you can do prior to the running of tests, TestNG never has this issue.

2.  TestNG @Configuration methods can all take an optional argument to their 
    annotated methods in the form of a ITestResult, XmlTest, Method, or 
    ITestContext.  This allows you to pass things around that JUnit wouldn't 
    provide you.  JUnit only does this in listeners and it is limited in use.

3.  TestNG comes with some pre-made report generation classes that you can copy
     and edit and make into your own beautiful test output with very little 
     effort. Just copy the report class into your project and add a listener 
     to run it.  Also, ReportNG is available.

4.  TestNG has a handful of nice listeners that you can hook onto so you can do
     additional AOP style magic at certain phases during testing.

Por que nós usamos o TestNG, em vez de JUnit?

  1. A declaração de @BeforeClass e @AfterClass o método tem que ser estático no JUnit, considerando que, há mais flexibilidade no TestNG na declaração do método, ele não tem essas restrições.

  2. Em TestNG, podemos parametrizar a utilização de testes de 2 maneiras.@Parâmetro ou @DataProvider anotação.

    i) @Parâmetro para os casos mais simples, onde o valor de chave de mapeamento é necessário.(dados é feito através de arquivo xml)

    ii) @DataProvider para casos complexos.Usando 2 matriz dimensional, pode fornecer dados.

  3. Em TestNG, desde que @DataProvider método não necessita de ser estático, nós podemos usar vários provedor de dados métodos da mesma classe de teste.

  4. Dependência De Testes: Em TestNG, se o teste inicial falhar, então todos os subseqüentes dependente de testes será ignorado, não marcada como falha.Mas JUnit marcado falhou.

  5. Agrupamento: Testes individuais pode pertencer a vários grupos e, em seguida, executar em diferentes contextos (como lento ou rápido testes).Um recurso semelhante existe no JUnit Categorias, mas não tem a @BeforeGroups / @AfterGroups TestNG anotações que permitem inicializar o teste / rasgá-la para baixo.

  6. Paralelismo: Se você gostaria de executar o mesmo teste em paralelo em vários segmentos, TestNG você tem coberto com um simples usar a anotação enquanto JUnit não oferece uma maneira simples de fazer isso fora da caixa.

  7. TestNG @DataProvider também pode oferecer suporte a XML para a alimentação de dados, CSVs, ou até mesmo arquivos de texto sem formatação.

  8. TestNG permite declarar as dependências entre os testes, e ignorá-los se o teste de dependência não passar.

@Test(dependsOnMethods = { "dependOnSomething" })

Essa funcionalidade não existe na JUnit

  1. Relatórios:

TestNG relatórios são gerados por padrão para um test-pasta de saída, que inclui relatórios em HTML com todos os dados de teste, passou/falhou/ignorado, quanto tempo eles correm, que a entrada foi utilizado o teste completo logs.Além disso, ele também exporta tudo para um arquivo XML que pode ser utilizado para construir seu próprio modelo de relatório.

No JUnit frente, todos estes dados também está disponível através de XML, mas não há fora da caixa relatório e precisar de plugins.

Recurso Link:

  1. Uma Rápida JUnit vs TestNG Comparação
  2. JUnit vs.TestNG:Qual Framework De Testes Que Você Deve Escolher?

Uma boa diferença, é dada neste tutorial lado a lado: TestNG Vs JUnit:Qual é a Diferença?

ambos são quase iguais.TestNG tem algumas características como testsuits e dependecy.encontrar por favor o anexo screeshot para obter o total de comparação. total Juni5 vs TestNG Comparação

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