Pergunta

[Edit (Haren): Duplicate ]

Eu estou procurando uma maneira de quebrar automaticamente meus testes de integração NUnit em uma transação DB, de modo que as alterações feitas pelo teste são automaticamente revertidas quando os fins de teste. Idealmente, gostaria de decorar certos métodos de ensaio com um atributo personalizado que causariam NUnit para criar uma transação quando o teste é iniciado e revertê-lo quando termina o teste ... Eu posso escrever o atributo, mas eu não sei de onde para adicionar um cheque para ele.

O teste DB é 3 GB de tamanho, então restaurá-lo no início de cada teste não é uma opção. Eu sei que posso criar manualmente uma transação no corpo de cada teste, mas eu estou procurando algo mais elegante.

Talvez há uma ferramenta de reescrever IL (um quadro AOP, talvez) que pode fazer isso para mim? Alguém tem alguma sugestão?

Foi útil?

Solução

Existem duas recomendações. A primeira é usar a configuração e atributos TearDown para iniciar a transação e revertê-lo quando terminar. A documentação a fazê-lo em NUnit é aqui:

http://www.nunit.org/index.php ? p = configuração & r = 2.4.8

Se você não quer usar isso, a outra opção que vejo é o código-lo em cada método, mas usar uma instância TransactionScope em uma declaração usando para criar a transação (o fornecedor deve auto-enlist).

É claro, você pode criar a instância TransactionScope na configuração e métodos de desmontagem também.

Outras dicas

Você não vai correr em problemas com transações aninhadas aqui? Pelo que entendi a maioria da DB não suportam transações dentro de transações. Portanto, se o código sob teste usa transações em tudo (eu acho que se você estiver usando um banco de dados que suporta transações, você estaria usando-os), então o que você realmente quer é transações aninhadas, que (me disseram) mais DBs não suportam diretamente.

Spring.net?

Eu venho de um fundo Java / JUnit, mas eu sei que em Java você pode fazer isso usando SpringFramework.

(Você também terá que obter o seu teste do ApplicationContext / BeanFactory para aplicar AOP a ele).

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