Posts Tagged 'XtUnit'

Rollback automático com NUnit

A situação é comum: você constrói um conjunto de testes unitários baseado em registros que estão salvos em um banco de dados e tudo funciona bem. O problema é que assim que os dados são alterados/apagados/inseridos pelo primeiro ciclo de testes, seus Asserts simplesmente deixam de funcionar – e você precisa de alguma maneira voltar a base ao seu estado original.

Bom, antes de qualquer coisa vamos deixar algo claro: provavelmente você não devesse estar dependendo de um banco de dados. Se você estiver testando sua camada de domínio, o ideal é que suas suas classes de controle consumam uma interface de suas classes DAO cuja dependência tenha sido injetada. Isto permitirá que você construa stubs de suas classes de acesso a dados, garantindo que seus testes rodarão rapidamente (e que você sempre tenha coragem para rodá-los!) e não dependam de um banco de dados para serem rodados.

Mas suponhamos que você tenha uma razão muito forte para querer depender de um banco de dados. Você pode estar testando a camada de acesso a dados em si, stressar seu database através de testes unitários ou simplesmente já possuir um conjunto muito grande de testes prontos que desencorajam o refactor (não é algo que você deva se orgulhar, mas coisas assim acontecem). Em qualquer um desses casos, você tem algumas opções:

  1. Escrever seus testes para que eles sejam auto-suficientes: uma boa prática, seguindo a “metodologia” AAA de testes unitários: Arrange, Act, Assert. Para alguns casos (com muitos registros envolvidos), entretanto, isto pode ser bastante trabalhoso (e demorado);
  2. Criar um backup da base que você roda os testes e restaurá-lo constantemente: menos trabalhoso, mas longe do ideal. Mesmo automatizando o restore via código trabalho adicional associado sempre que os dados fossem efetivamente alterados (para adição de novos testes, por exemplo);
  3. Recarregar os dados do database a partir de XML, DBF ou algo que o valha: uma opção legal e até bem difundida. Arquivos XML ou de qualquer outro tipo, entretanto, não são minha representação ideal de dados relacionais;
  4. E por último, é claro, a opção que falaremos aqui: utilizar o XtUnit, framework desenvolvido pelo Roy Osherove (uma espécie de bam-bam-bam dos testes unitários) que permite um rollback nos seus dados com um simples attribute de [DataRollBack].

Continue lendo o post completo..

Anúncios

Perfil

Olá! Meu nome é José Filipe e sou o autor deste blog. Trabalho como Gerente de Desenvolvimento da todo! BPO, onde sou responsável pela manutenção e evolução de pessoas, processos e sistemas desenvolvidos em diferentes tecnologias. Atualmente curso uma especialização em Engenharia de Software pela PUCPR, em Curitiba, mas moro em Florianópolis, onde me graduei em Sistemas de Informação pela UFSC. Possuo o título de MCP e com base nas experiências do dia-a-dia espero trazer ao blog assuntos interessantes sobre arquitetura e desenvolvimento .NET..

Arquivos

Páginas

setembro 2017
S T Q Q S S D
« jun    
 123
45678910
11121314151617
18192021222324
252627282930