Ich habe eine Basisklasse mit einer Menge "Meta-Programmierung", um ihr die Flexibilität / Abstraktion zu geben, die sie braucht, um eher allgemein zu sein.
Ich habe viele Unterklassen, die die in der Basisklasse üblichen Methoden verwenden, und ich habe verhaltensorientierte Komponententests, die alle Fälle in jeder Unterklasse abdecken.
Ist es in Ordnung, das Testen der Basisklasse zu überspringen?
unit-testing
testing
Nathan
quelle
quelle
Antworten:
Um zu überprüfen, ob Sie über genügend Tests verfügen oder nicht, können Sie Ihre Codeabdeckung und die durch die Tests hervorgerufene Zweigabdeckung überprüfen (möglicherweise mithilfe eines Abdeckungswerkzeugs, möglicherweise manuell durch Überprüfen der Codepfade oder mithilfe eines Debuggers).
Wenn Sie zu dem Schluss kommen, dass die Tests für die Unterklassen eine ausreichende Abdeckung für den Code Ihrer Basisklassen bieten, wird das Hinzufügen weiterer Tests Ihnen offensichtlich keinen großen Nutzen bringen. Wenn es Codepfade gibt, die Sie nur testen können, indem Sie bestimmte Tests direkt mit der Basisklasse hinzufügen, sollten Sie diesen Weg einschlagen.
Ein weiterer möglicher Grund für das "direkte Testen Ihrer Basisklasse" besteht darin, dass Sie eine bestimmte Funktion dieser Klasse "isoliert" testen möchten. Manchmal ist es einfacher, Testfälle direkt für eine bestimmte Methode zu entwerfen, als diese Methode nur indirekt zu testen, indem Sie die Methoden Ihrer Unterklassen aufrufen, die diese Methode verwenden.
Beachten Sie , dass Ihre Basisklasse wahrscheinlich abstrakt ist , wenn Sie eine generische Basisklasse haben, für die das typische Verwendungsszenario darin besteht , eine Unterklasse abzuleiten. Zum Testen einer solchen Klasse müssen Sie also trotzdem eine Ableitung vornehmen. In diesem Fall könnte das Testen "der Basisklasse direkt" natürlich bedeuten, eine spezielle Ableitung nur zu Testzwecken hinzuzufügen.
quelle
Wir haben Tests, die uns produktiver machen und die Zahl der Kunden, über die sich „Probleme“ beschweren, verringern sollen.
Wenn Sie also verhaltensorientierte Komponententests haben, die alle Fälle in jeder Unterklasse abdecken, hat dies keinen Vorteil für den Kunden, der auch die Basisklasse direkt testet. Dies kann bestätigt werden, indem ein Code in der Basisklasse geändert wird und überprüft wird, ob ein Test fehlschlägt, z. (Nur zu überprüfen, ob jede Codezeile von den Tests abgedeckt wird, ist nicht gut genug.)
Wir werden uns dann fragen, ob der Test Sie produktiver machen würde . Dies kann auf verschiedene Arten geschehen.
Angesichts der Tatsache, dass die Unterklassen funktionieren, sehe ich keinen Grund darin, direkte Tests für die Basisklasse zu schreiben. Es ist heutzutage nicht so, dass es nicht vorteilhaft gewesen wäre, diese Tests zu einem frühen Zeitpunkt zu schreiben.
quelle