Me pediram para fazer um pequeno projeto paralelo para fornecer um aplicativo simples a um de nossos clientes. Normalmente, eu trabalhava no código de back-end em que todas as minhas necessidades de teste foram descobertas e ainda não tive o prazer duvidoso de escrever testes para a GUI, por isso não é claro para mim como devo configurar o código de teste e as ferramentas para um EXE.
Meu primeiro instinto foi simplesmente incluir os testes com o código do aplicativo, no entanto, isso exigiria o fornecimento de várias dependências específicas do teste, as quais fui instruído a não enviar especificamente para o cliente. Também não consigo extrair dinheiro para uma ferramenta de teste criada para fins específicos, por isso preciso usar as ferramentas que tenho em mãos ( StoryQ , RhinoMocks e NUnit), que realmente deve ser mais do que suficiente para testar o comportamento de um aplicativo GUI simples. Até onde eu posso ver, isso me deixa tentando encontrar um bom equilíbrio entre manter o design realmente simples, ou fazer uma engenharia de propósito intencional em prol dos testes. Parece que estou construindo o aplicativo com a lógica de negócios em uma biblioteca separada e testando-a como normalmente, ou encontrando algum outro mecanismo para permitir o executável sem quebrar módulos adicionais que o design do aplicativo não faz realmente preciso.
Edit:
Observe que esta pergunta é sobre como estruturar o relacionamento entre o NUnit e o meu executável - em oposição a uma DLL - e não sobre como separar a apresentação e a lógica de negócios.
/Editar
Então, minha pergunta é:
- Existe um método específico / recomendado para configurar um aplicativo GUI simples com testes de unidade para me permitir verificar adequadamente o estado e o comportamento, usando as ferramentas que tenho à mão e sem recorrer à engenharia em excesso?
- Perdi algo fundamental sobre a maneira como o NUnit deve ser chamado / configurado ao testar um EXE (em vez de uma DLL)?
- Você pode me fornecer ou apontar exemplos de como conseguir tudo isso?
Sei que pode haver mais de uma maneira de fazer isso, por isso estou procurando diretrizes de implementação específicas com base na sua experiência.