1) MethodName_StateUnderTest_ExpectedBehavior
Public void Sum_NegativeNumberAs1stParam_ExceptionThrown()
Public void Sum_NegativeNumberAs2ndParam_ExceptionThrown ()
Public void Sum_simpleValues_Calculated ()
Source: Normes de nommage pour les tests unitaires
2) Séparer chaque mot par soulignement
Public void Sum_Negative_Number_As_1st_Param_Exception_Thrown()
Public void Sum_Negative_Number_As_2nd_Param_Exception_Thrown ()
Public void Sum_Simple_Values_Calculated ()
Je suis à peu près avec vous sur cet homme. Les conventions de dénomination que vous avez utilisées sont les suivantes:
De quoi avez-vous besoin de plus d'un nom de test?
Contrairement à réponse de Ray Je ne pense pas que le préfixe Test soit nécessaire. C'est le code de test, nous le savons. Si vous devez le faire pour identifier le code, vous avez de gros problèmes (), votre code de test ne doit pas être confondu avec votre code de production.
Quant à la longueur et à l'utilisation du trait de soulignement, son code de test , qui se soucie de l'enfer? Seuls vous et votre équipe pourrez le voir, tant qu'il est lisible et clair sur le résultat du test, continuez! :)
Cela dit, je suis encore assez novice pour tester et bloguer mes aventures avec :)
Cela vaut également la peine d’être lu: Tests unitaires de structuration
La structure a une classe de test par classe testée. Ce n’est pas si inhabituel. Mais ce qui était inhabituel pour moi était qu'il avait une classe imbriquée pour chaque méthode testée.
par exemple.
using Xunit;
public class TitleizerFacts
{
public class TheTitleizerMethod
{
[Fact]
public void NullName_ReturnsDefaultTitle()
{
// Test code
}
[Fact]
public void Name_AppendsTitle()
{
// Test code
}
}
public class TheKnightifyMethod
{
[Fact]
public void NullName_ReturnsDefaultTitle()
{
// Test code
}
[Fact]
public void MaleNames_AppendsSir()
{
// Test code
}
[Fact]
public void FemaleNames_AppendsDame()
{
// Test code
}
}
}
Et voici pourquoi:
Eh bien, d’une part, c’est un bon moyen de garder les tests organisés. Tous les tests (ou faits) d'une méthode sont regroupés. Par exemple, si vous utilisez le raccourci CTRL + M, CTRL + O pour réduire les corps de méthode, vous pouvez facilement analyser vos tests et les lire comme une spécification de votre code.
J'aime aussi cette approche:
MethodName_StateUnderTest_ExpectedBehavior
Alors peut-être ajuster à:
StateUnderTest_ExpectedBehavior
Parce que chaque test sera déjà dans une classe imbriquée
J'ai tendance à utiliser la convention de MethodName_DoesWhat_WhenTheseConditions
donc par exemple:
Sum_ThrowsException_WhenNegativeNumberAs1stParam
Cependant, ce que je vois beaucoup, c’est que le nom du test suive la structure de tests unitaires de
Ce qui suit également la syntaxe BDD/Gherkin de:
ce qui serait nommer le test de la manière suivante: UnderTheseTestConditions_WhenIDoThis_ThenIGetThis
donc à votre exemple:
WhenNegativeNumberAs1stParam_Sum_ThrowsAnException
Cependant, je préfère de loin placer le nom de la méthode à tester en premier, car les tests peuvent être classés par ordre alphabétique ou affichés triés par ordre alphabétique dans la liste déroulante des membres de VisStudio, et tous les tests correspondant à une méthode sont regroupés.
Dans tous les cas, j'aime bien séparer la majeure sections du nom du test avec des traits de soulignement, par opposition à chaque Word, car je pense que cela facilite la lecture et la compréhension du point. de l'essai à travers.
En d'autres termes, j'aime bien: Sum_ThrowsException_WhenNegativeNumberAs1stParam
mieux que Sum_Throws_Exception_When_Negative_Number_As_1st_Param
.
Je nomme mes méthodes de test comme d'autres méthodes utilisant "PascalCasing" sans aucun trait de soulignement ni séparateur. Je laisse le postfix Test pour la méthode out, car il n’ajoute aucune valeur. Le fait que la méthode soit une méthode de test est indiqué par l'attribut TestMethod .
[TestMethod]
public void CanCountAllItems() {
// Test the total count of items in collection.
}
Du fait que chaque classe de test ne doit tester qu’une autre classe, je laisse le nom de la classe en dehors du nom de la méthode. Le nom de la classe qui contient les méthodes de test est nommé comme la classe à tester avec le suffixe "Tests".
[TestClass]
public class SuperCollectionTests(){
// Any test methods that test the class SuperCollection
}
Pour les méthodes qui testent des exceptions ou des actions impossibles, je préfixe la méthode de test avec le mot ne peut pas .
[TestMethod]
[ExpectedException(typeOf(ArgumentException))]
public void CannotAddSameObjectAgain() {
// Cannot add the same object again to the collection.
}
Mes convictions de nommage sont basées sur l'article "Conseils TDD: Conventions de nomenclature de test et directives" de Bryan Cook. J'ai trouvé cet article très utile.
Le premier ensemble de noms m'est plus lisible, car CamelCasing sépare les mots et les barres de sous-couche séparent des parties du schéma de nommage.
J'ai aussi tendance à inclure "Test" quelque part, soit dans le nom de la fonction, soit dans l'espace de noms ou la classe.