Vielen Dank für die tollen Antworten. Nicht nur eine Antwort war wirklich vollständig, deshalb schreibe ich hier eine Kombination aus allen Antworten, die mir geholfen haben . Wenn Ihnen diese Antwort gefällt, stimmen Sie bitte für die Personen, die dafür verantwortlich sind.
Schlussfolgerungen
Einheitstests (oder zumindest Einheitstests in unittest
Modul) sind binär. Als Guilherme Chapiewski sagt : Sie werden funktionieren oder scheitern, es gibt keine Zwischenlösung.
Daraus schließe ich, dass Unit-Tests nicht gerade das richtige Werkzeug für diese Aufgabe sind. Es scheint, dass Unit-Tests sich mehr um Folgendes kümmern "Damit alles funktioniert, wird kein Fehler erwartet" und deshalb kann ich keine nicht-binären Tests machen (oder es ist nicht einfach).
Unit-Tests scheinen also nicht das richtige Werkzeug zu sein, wenn ich versuche, einen Algorithmus oder eine Implementierung zu verbessern, denn Unit-Tests können mir nicht sagen, inwieweit eine Version im Vergleich zur anderen besser ist (vorausgesetzt, beide sind korrekt implementiert, dann bestehen beide alle Unit-Tests).
Meine endgültige Lösung
Meine endgültige Lösung basiert auf ryber's Idee und der Code in wcoenen Antwort . Ich bin im Grunde erweitern die Standard TextTestRunner
und weniger ausführlich zu gestalten. Dann ruft mein Hauptcode zwei Testanzüge auf: den kritischen, der den Standard TextTestRunner
und die unkritische, mit meiner eigenen, weniger ausführlichen Version.
class _TerseTextTestResult(unittest._TextTestResult):
def printErrorList(self, flavour, errors):
for test, err in errors:
#self.stream.writeln(self.separator1)
self.stream.writeln("%s: %s" % (flavour,self.getDescription(test)))
#self.stream.writeln(self.separator2)
#self.stream.writeln("%s" % err)
class TerseTextTestRunner(unittest.TextTestRunner):
def _makeResult(self):
return _TerseTextTestResult(self.stream, self.descriptions, self.verbosity)
if __name__ == '__main__':
sys.stderr.write("Running non-critical tests:\n")
non_critical_suite = unittest.TestLoader().loadTestsFromTestCase(TestSomethingNonCritical)
TerseTextTestRunner(verbosity=1).run(non_critical_suite)
sys.stderr.write("\n")
sys.stderr.write("Running CRITICAL tests:\n")
suite = unittest.TestLoader().loadTestsFromTestCase(TestEverythingImportant)
unittest.TextTestRunner(verbosity=1).run(suite)
Mögliche Verbesserungen
Es sollte dennoch nützlich sein, zu wissen, ob es ein Test-Framework mit nicht-binären Tests gibt, wie Kathy Van Stone schlug vor . Wahrscheinlich werde ich es für dieses einfache persönliche Projekt nicht verwenden, aber es könnte bei zukünftigen Projekten nützlich sein.