Bei Unit-Tests ist die Domain recht klein, daher ist es einfach. Ich habe Osheroves methodName_conditions_result()
Schema verwendet und fand es sehr klar.
Aber bei Integrationstests habe ich das Gefühl, dass dies einen sehr langen Namen ergeben würde, und was kann ich ersetzen methodName
? Wie benenne ich Integrationstestklassen?
Beispiele aus der Praxis für Namen von Integrationstests sind sehr willkommen. Ich hoffe, die Antworten helfen mir auch, diese Tests besser zu verstehen.
testing
naming
integration-tests
Bigstones
quelle
quelle
Antworten:
Bei Unit- und Integrationstests verfolge ich einen etwas anderen Ansatz. Ich versuche, sie so weit wie möglich nach Funktionen zu benennen. Wenn alle Tests bestanden sind, sehen Sie eine Liste aller Funktionen, die funktionieren und nicht funktionieren.
Es ist nicht immer pragmatisch, die Tests so zu benennen, aber es kann sehr hilfreich sein, insbesondere nach dem Lesen von Hunderten von Unit- und Integrationstests. Der insgesamt umfassende Klassenname, der diese Methoden enthält, sollte auch auf die getesteten Funktionen hinweisen. Es wird bei der Organisation helfen.
Ich würde auch vorschlagen, Unit-Tests für Bugfixes mit einem eindeutigen Präfix zu benennen, um
bugfix1002
zu beweisen, dass der Bug behoben wurde.quelle
Dies wurde wirklich geschrieben, um bei Unit-Tests zu helfen, aber vielleicht werden Sie feststellen, dass für Integrationstests (mehr oder weniger) dieselben Regeln gelten:
Schauen Sie sich sieben Schritte an !
Ich bevorzuge, dass, wie auch immer Sie es nennen, es wirklich der Name der Testsuite (Name des Geräts auf unserer Karte), der Effekt, den Sie überprüfen, und die Bestätigungsmeldung sind, die hervorstechen und die Ursache des Fehlers klarstellen müssen. Wenn Sie feststellen, dass dies mit Asheroves Benennung am einfachsten ist, dann unterstütze ich das von ganzem Herzen. Aber vielleicht besteht der Trick darin, dass Sie den Teil "Methode" mit allem ausfüllen, was die Bedingung, das Ergebnis und die Ausnahme sinnvoll macht.
Ich freue mich über eine Suite mit dem Namen "MakingADeposit" mit einem Test namens "AccountDoesntExist" und einem Fehler mit der Meldung "Expected NonesuchAccount Ausnahme - keine empfangen".
Wenn es Ihnen nichts ausmacht, wenn ich den Namen der Testsuite durch "::" trenne, bin ich mit "AccountHandling :: MakingADeposit_AccountDoesntExist_ThrowsAnException" einverstanden.
Die Karte schlägt auch vor, dass Sie, wenn Sie keinen guten Namen haben, fortfahren und einen besseren Namen geben, wenn Ihnen einer einfällt (hoffentlich lange bevor Sie den Code an CI senden).
quelle
Integrationstests sollten ähnlichen Regeln wie Komponententests folgen, da jeder Test einen Aspekt einer Anforderung testen sollte, aber das gesamte System testet. Die Klasse sollte das gesamte zu testende Objekt benennen, z. B. "TpcInputValidation", und die Benennung der Methode sollte ausdrücklich widerspiegeln, was der Test versucht, ohne übermäßig wortreich zu sein, z. B. "shouldRaiseValidationErrorWithBadDates ()".
Die Methoden sollten ein Konzept des Features testen, und eine große Anzahl von Asserts könnte auf etwas anderes hinweisen. (Siehe "Clean Code: Ein Handbuch für agiles Software-Handwerk", S. 132, von Robert Martin).
quelle
Das Problem ist also, dass ein Eigenname der Funktionalität für einen Methodennamen zu lang ist? Ich weiß, dass es umständlich ist, Testmethoden mit Namen wie
registerAndValidateUnderageUniversityDriverWithCoverageSetA_test()
und möglicherweise jemals gegen Compilerregeln für lange Methodennamen zu schreiben (PL / SQL erlaubt nur bis zu 30 Zeichen - ich weiß nicht, ob Java und C # solche Kurznamenbeschränkungen auferlegen, aber sogar Wenn dies nicht der Fall ist, wird es ab einem bestimmten Punkt ziemlich unhandlich und wirklich sehr lange Methodennamen sind möglicherweise nur für generierten Code nützlich, der von anderem generierten Code gelesen / verwaltet wird. Sie können versuchen, es zu verkürzen,regValUnderageUnivDrvrWCovrgA_test()
aber das ist auch wirklich schrecklich zu lesen. Eine Option, die ich verwendet habe, die mir nicht gefallen hat, die aber zu dieser Zeit die beste Wahl war, warunderageUnivDrvr_test_01()
und dann gab es eine Tabelle, in der die Methodennamen einer viel längeren Beschreibung der getesteten Funktionalität zugeordnet waren. Hässlich, aber es hat funktioniert. Sie können die Beschreibung des Tests auch in der Dokumentation der Funktion in der Quelldatei dokumentieren. Dies kann hilfreich sein, da Sie die Dokumentation der Tests direkt aus dem Code generieren können, anstatt zwischen Tabellenkalkulation und Code hin und her zuzuordnen.quelle