Pergunta

Eu estou trabalhando em um ambiente de teste para um projeto, e estou olhando para usar DbUnit.NET para fazer um monte de testes de interação com o banco. Eu tenho uma pergunta muito grande porém:

Estamos correndo contra Oracle, ea criação de uma instância de teste DB separado para todos os desenvolvedores realmente não é viável (especialmente desde temos apenas 1 DBA que já está precisando de tempo). Isto significa que todos os desenvolvedores e para fora do servidor de integração contínua toda a necessidade de usar o mesmo esquema DB.

Assim, para a pergunta: existe uma boa maneira de evitar que mais de 1 pessoa de testar ao mesmo tempo? Seria fácil colocar um registro em uma tabela db que indica que um teste está em execução, em seguida, removê-lo após os testes terminarem, mas não NUnit não tem qualquer maneira de executar alguma coisa no início da sessão de teste e fim.

Quaisquer outros pensamentos? Parece que ele deve ser um problema bastante comum ... ou que todo mundo realmente executar instâncias DB separadas para cada desenvolvedor / testador que pode executar os testes?

Foi útil?

Solução

Foi utilizada uma tabela fictícia com um único registro como um bloqueio símbolo quando corremos testes de banco de dados para um grupo de desenvolvedores em um banco de dados compartilhado. Nós realmente adquiriu o bloqueio para cada caso de teste individualmente para que um desenvolvedor que quer correr um caso de teste não tem que esperar por outro desenvolvedor que está correndo toda a suíte ao fim. Fizemos cada teste criado seus próprios dados -. Não carry over entre métodos de ensaio

Foi utilizado o mecanismo de bloqueio de banco de dados para realmente fila testa em vez de falhar quando alguém já está executando um teste. Acho algoritmo de travamento da Oracle é um pouco diferente, então eu não sei como isso iria funcionar.

O único lugar que teve problemas foi quando um desenvolvedor queria passo através de um teste no modo de depuração. Que iria bloquear quaisquer outros desenvolvedores que queriam executar um teste até que ele lançou o depurador. Nós escrevemos o nome do usuário atual em uma tabela fictícia, e teve o mecanismo de bloqueio imprimir uma mensagem se ele foi bloqueado por mais de 30 segundos: "Bob está sendo executado um teste e foi durante os últimos 5 minutos"

Este foi OK, mas foi muito trabalho para manter. Tentamos manter o número de testes de banco de dados pequeno, e fazer a maioria dos nossos testes como testes unitários puros na memória.

Outras dicas

Você pode usar o atributo [TestFixtureSetUp] para injetar sua bandeira que indica que os testes estão sendo executados como uma forma de simular um "verdadeiro" semáforo.

Algo que eu fiz em um problema com algumas semelhanças com este:

O programa teve uma variável de configuração que foi adicionado à frente de todos os itens relevantes. Cada estação possui seu próprio ajuste, ajuste corretamente não haveria conflitos.

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