Nous avons récemment adopté les modèles de spécification pour la validation des objets de domaine et souhaitons maintenant introduire le test unitaire de nos objets de domaine pour améliorer la qualité du code.Spécification des tests unitaires de modèle
Un problème que j'ai trouvé est de savoir comment tester au mieux la fonctionnalité de validation montrée dans l'exemple ci-dessous. La spécification frappe la base de données, donc je veux pouvoir la simuler mais comme elle est instanciée en ligne, je ne peux pas le faire. Je pourrais travailler sur des interfaces mais cela augmente la complexité du code et comme nous avons beaucoup de spécifications, nous aurons finalement beaucoup d'interfaces (rappelez-vous que nous introduisons des tests unitaires et que nous ne voulons pas donner d'excuse à quelqu'un vers le bas). Étant donné ce scénario, comment pourrions-nous résoudre au mieux le problème de l'unité de test du modèle de spécification dans nos objets de domaine?
...
public void Validate()
{
if(DuplicateUsername())
{ throw new ValidationException(); }
}
public bool DuplicateUsername()
{
var spec = new DuplicateUsernameSpecification();
return spec.IsSatisfiedBy(this);
}
Merci pour les commentaires Mark, je suis d'accord avec tout ce que vous dites mais espérais une solution décente à cela. Il y a quelque chose qui ne va pas bien dans l'héritage des cours et des méthodes principales dans le projet de test, je pense que ce serait les frais généraux que nous pourrions éviter si nous avions un design décent en premier lieu, ce que j'espère sortir de ce post. – Burt
@Burt: J'ai peut-être mal compris votre question alors. La conception «décente» tourne autour de SOLID. En particulier, le principe ouvert/fermé est très important pour la testabilité. Cela implique à nouveau DI, ce qui signifie beaucoup d'interfaces et d'usines abstraites, et j'ai lu votre question à l'effet que vous ne pouviez pas vraiment vous permettre cette taxe maintenant. –
Je ne voulais pas trop rocker le bateau mais ça ressemble à des interfaces qui seront le meilleur moyen de réaliser ce que je veux. – Burt