Ich habe kürzlich die folgende Konvention entwickelt, um meine Tests, ihre Klassen und Projekte zu benennen, um ihre Beschreibungen zu maximieren:
Nehmen wir an, ich teste die Settings
Klasse in einem Projekt im MyApp.Serialization
Namespace.
Zuerst werde ich ein Testprojekt mit dem MyApp.Serialization.Tests
Namespace erstellen .
Innerhalb dieses Projekts und natürlich des Namespace werde ich eine Klasse namens IfSettings
(gespeichert als IfSettings.cs ) erstellen .
Nehmen wir an, ich teste die SaveStrings()
Methode. -> Ich werde den Test benennen CanSaveStrings()
.
Wenn ich diesen Test durchführe, wird die folgende Überschrift angezeigt:
MyApp.Serialization.Tests.IfSettings.CanSaveStrings
Ich denke, das sagt mir sehr gut, was es testet.
Natürlich ist es nützlich, dass das Substantiv "Tests" im Englischen dasselbe ist wie das Verb "tests".
Ihrer Kreativität bei der Benennung der Tests sind keine Grenzen gesetzt, sodass wir vollständige Satzüberschriften für sie erhalten.
Normalerweise müssen die Testnamen mit einem Verb beginnen.
Beispiele beinhalten:
- Erkennt (zB
DetectsInvalidUserInput
)
- Würfe (zB
ThrowsOnNotFound
)
- Will (zB
WillCloseTheDatabaseAfterTheTransaction
)
usw.
Eine andere Möglichkeit ist, "das" anstelle von "wenn" zu verwenden.
Letzteres erspart mir jedoch Tastatureingaben und beschreibt genauer, was ich tue, da ich nicht weiß, dass das getestete Verhalten vorhanden ist, aber teste, ob es vorhanden ist.
[ Bearbeiten ]
Nachdem ich die obige Namenskonvention nun etwas länger verwendet habe, habe ich festgestellt, dass das If- Präfix bei der Arbeit mit Schnittstellen verwirrend sein kann. Es ist einfach so, dass die Testklasse IfSerializer.cs der Schnittstelle ISerializer.cs auf der Registerkarte "Dateien öffnen " sehr ähnlich sieht . Dies kann sehr ärgerlich werden, wenn zwischen den Tests, der getesteten Klasse und ihrer Schnittstelle hin und her gewechselt wird. Als Ergebnis würde ich jetzt That anstelle von If als Präfix wählen .
Zusätzlich verwende ich jetzt - nur für Methoden in meinen Testklassen, da dies nirgendwo anders als Best Practice angesehen wird - das "_", um Wörter in meinen Testmethodennamen wie folgt zu trennen:
[Test] public void detects_invalid_User_Input()
Ich finde das leichter zu lesen.
[ Bearbeiten beenden ]
Ich hoffe, dass dies weitere Ideen hervorbringt, da ich die Benennung von Tests für sehr wichtig halte, da Sie dadurch viel Zeit sparen können, die sonst aufgewendet worden wäre, um zu verstehen, was die Tests tun (z. B. nach Wiederaufnahme eines Projekts nach einer längeren Pause). .