Estamos usando o StructureMap em um novo projeto de desenvolvimento de software. Um dos membros da equipe implementou um teste de unidade que basicamente testa a configuração do contêiner do StructureMap . Faz isso fazendo o seguinte;
- Conta o número de instâncias de assemblies configurados para classes em nosso espaço para nome do aplicativo.
- Define as instâncias esperadas no nível da classe
- Afirma que as instâncias esperadas correspondem ao total de instâncias encontradas.
- Afirma que as instâncias esperadas correspondem às definidas no teste
Um exemplo disso é;
var repositories = container.GetAllInstances<IEnvironmentRepository>();
Assert.AreEqual(1, repositories .Count());
foundInstances = foundInstances + repositories .Count();
Também temos 'testes de unidade' para a seguinte classe;
public MyClass(IEnvironmentRepository environmentRepository)
{
}
Nesses testes, simulamos o IEnvironmentRepository, para não injetá-lo do contêiner, como aconteceria no sistema ativo.
Um colega ignorou o teste de unidade na configuração do mapa de estrutura com um comentário ao longo da linha "Teste de unidade apenas testa sua própria configuração". Obviamente, esse foi o objetivo do teste e, na minha opinião, é perfeitamente válido. Pedi ao cara que ignorou o teste para remover a configuração do mapa de estrutura IEnvironmentRepository(com o teste ainda ignorado) e executar o conjunto de testes de unidade completo, todos eles passaram. Em seguida, executamos o aplicativo e ele caiu porque a configuração do contêiner agora era inválida. Na minha opinião, isso provou o valor do teste, meu colega ainda discordava. Ele simplesmente declarou que não deveríamos testar a configuração, mas considero que isso está dentro da área de um teste de unidade.
Então, várias perguntas;
- É um teste de unidade válido - Estamos testando a configuração do nosso contêiner, não que o mapa de estrutura funcione (mas posso ver a sobreposição)
- Caso contrário, como você pode validar a configuração sem testá-la. Como você pode impedir que alguém exclua acidentalmente uma linha de código necessária e faça o check-in?
- O
MyClassteste de unidade deve resolver a instância doIEnvironmentRepositorycontêiner e passar isso?