Problématique
Dans les tests d'approbation avec la librairie ApprovalTests, celle-ci génère un nom unique pour chaque fichier approuvé ou reçu. Le nom de fichier suit le format suivant : *.approved.txt
.
Cette méthode fonctionne parfaitement pour les tests basés sur des faits [Fact]
. Cependant, pour un test basé sur des théories [Theory]
, qui est piloté par des données et implique plusieurs appels à la même méthode, le nom de fichier généré reste unique et cela pose problème.
Exemple
Considérons l'exemple suivant.
public class TestClass { [Theory] [InlineData(10)] [InlineData(20)] public void TestMethod(int value) { var result = Compute(value); Approvals.Verify(result); } }
Dans le code ci-dessus, le nom de fichier généré pour les deux tests serait TestClass.TestMethod.approved.txt
. Cela signifie qu'un seul fichier d'approbation est utilisé pour les deux tests.
Solution
Le modèle de nommage du namer
par défaut d'ApprovalTests est [ClassName].[MethodName].[
. Nous pouvons donc utiliser la partie AdditionalInformation
(optional)].approved.[Extension]AdditionalInformation
pour générer des noms de fichiers uniques pour nos tests.
public class TestClass { [Theory] [InlineData(10)] [InlineData(20)] public void TestMethod(int value) { NamerFactory.AdditionalInformation = $"value={value}"; var result = Compute(value); Approvals.Verify(result); } }
Maintenant, lors de l'exécution des tests, deux fichiers seront générés :
TestClass.TestMethod.value-10.approved.txt
TestClass.TestMethod.value-20.approved.txt
Conclusion
L’utilisation d’un identifiant unique via l’attribut AdditionalInformation
dans les tests d'approbation avec xUnit résout le problème de non-unicité des fichiers pour les tests basés sur des théories.