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].[AdditionalInformation(optional)].approved.[Extension]. Nous pouvons donc utiliser la partie 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.