0
votes

Ordonnance d'opérations de test unitaire

Supposons que nous voulions faire des steaks.

public void MakeSteakTest() {
  var rawSteak = new Steak();
  this.restaurant.MakeSteak(rawSteak);
  this.KitchenServices.Verify(x => x.AddSeasoning(rawSteak) , Times.Once);
  this.KitchenServices.Verify(x => x.Grill(rawSteak) , Times.Once);
}


1 commentaires

3 Réponses :


4
votes

généralement vous devez tester les résultats , pas implémentation dans un test d'unité. Que se passe-t-il dans votre système si makesteak a été modifié afin que les opérations soient dans un ordre différent? Est-ce quelque chose qui est observable? Étant donné que votre seule inveille est un objet steak , existe-t-il une sorte de validation qui échoue si grill est appelé avant additionning ? que est ce que vous devriez tester.


2 commentaires

Je conviens que nous devrions généralement éviter de tester les détails de la mise en œuvre, mais que s'il existe une logique commerciale qui applique que nous devons toujours assainir le steak avant de le griller, comment puis-je vous assurer que cette prémisse n'est pas brisée dans les changements futurs?


Encore une fois, qu'est-ce que arrive si vous appelez les méthodes dans un ordre différent? Quelque chose change-t-il dans l'état du système? Est une exception projetée? Si rien ne change, alors pourquoi cela compte-t-il de l'ordre dans lequel ils sont appelés?



1
votes

Une solution serait de représenter chaque opération en tant qu'objet de commande qui fonctionne sur le steak, par exemple xxx

puis renvoyer une séquence d'opérations: xxx

Ensuite, votre test peut affirmer que tout gril op est surviennent avant tout assaisonnement: xxx


0 commentaires

1
votes

Ma question est que nous devrions avoir un test pour vous assurer que le steak n'est pas assaisonné après sa grillée?

Premier: a-t-il un effet sur le comportement visible par l'utilisateur / intervenant final, et se soucient-ils?

Si oui, comment?

ALORS:

  • Comment est-ce que le problème est capable de détecter cet effet sur le comportement? Utilisez cette même méthode dans votre test.
  • Quel est le comportement que l'utilisateur attend? Utilisez cette attente dans votre test.

    Cela pourrait sembler "trop ​​simple" / "de manière limitée", mais je suis totalement sérieux. C'est la définition des tests de comportement appropriés.


0 commentaires