Pergunta

O que você usa para escrever testes conduzidos com dados no jUnit?

(Minha definição de) um teste baseado em dados é um teste que lê dados de alguma fonte externa (arquivo, banco de dados, ...), executa um teste por linha / arquivo / whatever, e exibe os resultados em um teste corredor como se você tivesse testes separados -. o resultado de cada corrida é exibido separadamente, não em um grande agregado

Foi útil?

Solução

Em JUnit4 você pode usar o Parameterized TestRunner fazer orientados a dados testes.

Não é terrivelmente bem documentado, mas a idéia básica é criar um método estático (anotado com @Parameters) que retorna uma coleção de matrizes de objeto. Cada uma destas matrizes são usadas como os argumentos para o construtor classe de teste, e em seguida, os métodos de ensaio usuais podem ser executados utilizando os campos definidos no construtor.

Você pode escrever código para ler e analisar um arquivo de texto externo no método @Parameters (ou obter dados de outra fonte externa), e então você seria capaz de adicionar novos testes, editando esse arquivo sem recompilar os testes.

Outras dicas

Este é o lugar onde TestNG, com sua @DataSource, brilha. Essa é uma razão pela qual eu prefiro que JUnit; os outros são dependências e paralela testes roscados.

Eu uso um banco de dados in-memory, como hsqldb para que eu pode preencher previamente o banco de dados com um " produção de estilo" conjunto de dados ou eu posso começar com uma base de dados hsqldb vazio e preenchê-lo com linhas que eu preciso para realizar o meu teste. No topo do que vou escrever meus testes usando JUnit e Mockito .

Eu uso combinação de DbUnit , jMock e jUnit 4. Então você pode éter executá-lo como conjunto ou separadamente

Você é melhor fora estendendo TestCase com um "DataDrivenTestCase" que se adapte às suas necessidades. Aqui está um exemplo de trabalho: http://mrlalonde.blogspot.ca/2012/08 /data-driven-tests-with-junit.html

Ao contrário dos testes parametrizadas, que permite a casos de teste bem nomeados.

Eu estou com @ DroidIn.net, que é exatamente o que estou fazendo, no entanto, para responder à sua pergunta, literalmente, "e exibe os resultados em um corredor de teste como se você tivesse testes separados," você tem que olhar para o JUnit4 corredor parametrizado. não DBUnit não fazer isso. Se você tem que fazer um monte de presente, honestamente TestNG é mais flexível, mas você pode perfeitamente fazê-lo no JUnit.

Você também pode olhar para o corredor Teorias JUnit, mas a minha lembrança é que ele não é grande para Data Driven conjuntos de dados, que tipo de faz sentido, porque JUnit não é sobre como trabalhar com grandes quantidades de dados externos.

Mesmo que este é um grande tema velho, eu ainda pensava de contribuir minha parte. Eu sinto o apoio da JUnit para dados de teste orientado é para menos e muito hostil. por exemplo. Para utilizar parametrizado, precisamos escrever o nosso construtor. Com Teorias corredor não temos controle sobre o conjunto de dados de teste que é passado para o método de teste.

Há mais desvantagens identificadas nesta série postagem no blog: http://www.kumaranuj.com/2012/08/junits-parameterized-runner-and-data.html

Existe agora uma solução abrangente que vem junto muito bem na forma de EasyTest que é um um quadro estendido para fora da JUnit e se destina a dar uma série de funcionalidades para seus usuários. Seu foco principal é a realização de Data Driven Testing usando JUnit, embora você não é obrigado a realmente dependem JUnit mais. Aqui está o projeto github para refernece: https://github.com/anujgandharv/easytest

Se alguém estiver interessado em contribuir seus pensamentos / código / sugestões, então este é o momento. Você pode simplesmente ir para o repositório github e criar problemas.

testes Tipicamente dados controlado por usar um componente pequeno testável para manipular os dados. (File objeto de leitura, ou objetos mock) Para bancos de dados, e fora recursos das simulações de aplicativos são usados ??para similate outros sistemas. (Serviços Web e bases de dados etc). Normalmente eu vejo é que existem arquivos de dados externos que manipulam os dados e a saída. Desta forma, o arquivo de dados pode ser adicionado ao VCS.

Atualmente, temos um arquivo adereços com os nossos números de identificação nele. Isto é terrivelmente frágil, mas é fácil de conseguir alguma coisa. Nosso plano é ter inicialmente estes números de identificação substituível por -D propriedades em nossa formiga constrói.

Nosso ambiente usa uma DB legado com os dados horrivelmente entrelaçadas que não é carregável antes de uma corrida (por exemplo, DbUnit). Eventualmente nós gostaríamos de chegar ao local onde um teste de unidade iria consultar o banco de dados para encontrar uma identificação com a propriedade em teste, em seguida, usar esse ID no teste de unidade. Seria lento e é mais apropriadamente chamada integração testes, não "teste de unidade", mas seria testar contra dados reais para evitar a situação em que nosso aplicativo funciona perfeitamente com os dados de teste, mas não com dados reais.

Alguns testes vai se prestam a ser interface orientada.

Se o banco de dados / arquivo leituras são recuperados por uma chamada de interface então simplesmente obter o seu teste de unidade para implementar a interface ea classe de teste de unidade pode retornar todos os dados que você deseja.

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