Nous utilisons StructureMap dans un nouveau projet de développement logiciel. L'un des membres de l'équipe a mis en œuvre un test unitaire qui teste essentiellement la configuration du conteneur StructureMap . Il le fait en procédant comme suit;
- Compte le nombre d'instances d'assemblys configurés pour les classes dans notre espace de noms d'application.
- Définit les instances attendues au niveau de la classe
- Affirme que les instances attendues correspondent au nombre total d'instances trouvées.
- Affirme que les instances attendues correspondent à celles définies dans le test
Un exemple de ceci est;
var repositories = container.GetAllInstances<IEnvironmentRepository>();
Assert.AreEqual(1, repositories .Count());
foundInstances = foundInstances + repositories .Count();
Nous avons également des «tests unitaires» pour la classe suivante;
public MyClass(IEnvironmentRepository environmentRepository)
{
}
Dans ces tests, nous nous moquons de IEnvironmentRepository, donc nous ne l'injecterions pas du conteneur comme cela se produirait dans le système actif.
Un collègue a ignoré le test unitaire dans la configuration structuremap avec un commentaire du type "Le test unitaire teste uniquement sa propre configuration". C'était évidemment le but du test et à mon avis c'est parfaitement valable. J'ai demandé au gars qui a ignoré le test de supprimer la configuration de structuremap IEnvironmentRepository
(avec le test toujours ignoré) et d'exécuter la suite de tests unitaires complète, ils ont tous réussi. Nous avons ensuite exécuté l'application et elle est tombée car la configuration du conteneur n'était plus valide. À mon avis, cela prouvait la valeur du test, mon collègue n'était toujours pas d'accord. Il a simplement déclaré que nous ne devrions pas tester la configuration, mais je considère que cela relève bien du mandat d'un test unitaire.
Donc, un certain nombre de questions;
- Est-ce un test unitaire valide - Nous testons la configuration de notre conteneur, pas que la structure de carte fonctionne (mais je peux voir le chevauchement)
- Sinon, comment pouvez-vous valider la configuration sans la tester. Comment pouvez-vous empêcher quelqu'un de supprimer accidentellement une ligne de code requise et de l'archiver?
- Le
MyClass
test unitaire doit-il résoudre l'instance deIEnvironmentRepository
du conteneur et le transmettre?