Pergunta

Atualmente, estou escrevendo um miniaplicativo simples baseado em temporizador em C# que executa uma ação n vezes a cada k segundos.
Estou tentando adotar um estilo de desenvolvimento orientado a testes, então meu objetivo é testar a unidade de todas as partes do aplicativo.

Então, minha pergunta é:Existe uma boa maneira de testar a unidade de uma classe baseada em timer?

O problema, a meu ver, é que existe um grande risco de que os testes demorem desconfortavelmente para serem executados, já que eles devem esperar tanto tempo para que as ações desejadas aconteçam.
Principalmente se se deseja dados realistas (segundos), em vez de usar a resolução de tempo mínima permitida pelo framework (1 ms?).
Estou usando um objeto mock para a ação, para registrar a quantidade de vezes que a ação foi chamada, e para que a ação praticamente não demore.

Foi útil?

Solução

O que tenho feito é para zombar o temporizador, e também a hora atual do sistema, que meus eventos podem ser acionado imediatamente, mas, tanto quanto o código sob teste estava preocupado tempo decorrido foi segundos.

Outras dicas

Eu acho que o que eu iria fazer neste caso é o teste o código que realmente executa quando o temporizador carrapatos, ao invés de toda a seqüência. O que você realmente precisa decidir é se vale a pena para você testar o comportamento real da aplicação (por exemplo, se o que acontece depois de cada carrapato muda drasticamente de um carrapato para outro), ou se é suficiente (isto é, , a ação é o mesmo toda vez) apenas para testar a sua lógica.

Uma vez que o comportamento do temporizador é garantido nunca a mudança, ele é qualquer um que vai para funcionar corretamente (ou seja, você configurou-lo à direita) ou não; parece ser a ser desperdício de esforços para incluir isso em seu teste, se você realmente não precisa.

Eu concordo com Danny na medida em que provavelmente faz sentido do ponto de vista de testes de unidade para esquecer simplesmente sobre o mecanismo temporizador e apenas verificar se a ação em si funciona como esperado. Também gostaria de dizer que eu discordo em que é desperdício de esforço para incluir a configuração do temporizador em uma suite de testes automatizados de algum tipo. Há uma grande quantidade de casos extremos quando se trata de trabalhar com aplicações de tempo e é muito fácil criar uma falsa sensação de segurança em apenas testando as coisas que são fáceis de teste.

Eu recomendaria ter um conjunto de testes que executa o temporizador, bem como a ação real. Esta suite provavelmente vai demorar um pouco para correr e provavelmente não seria algo que você iria correr o tempo todo em sua máquina local. Mas a criação desses tipos de coisas em uma nightly build automatizado pode realmente ajudar a erradicar insetos antes que eles se tornam muito difíceis de encontrar e correção.

Assim, em breve a minha resposta à sua pergunta é não se preocupe em escrever alguns testes que levam muito tempo para ser executado. teste de unidade que você pode e fazer essa suíte de execução de teste rápido e, muitas vezes, mas certifique-se de suplemento que com testes de integração que funcionam com menos frequência, mas a cobertura mais do aplicativo e sua configuração.

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