Ich schreibe Tests und ich habe einige Leute sagen zu verwenden self.assertFalse
statt assert False
gehört. Warum ist das und gibt es irgendwelche Vorteile zu haben?Was sind die Vorteile oder der Unterschied in "Asse False" und "self.assertFalse"
Antwort
assert False
löst eine Ausnahme ohne nützliche Protokollierungsinformationen aus. Der Test hatte einen Fehler.
self.assertFalse()
löst eine Testfehlerausnahme mit Testfehlerinformationen wie einer Nachricht und einem Testnamen aus.
Es gibt einen Unterschied zwischen einem Fehler - Test konnte nicht einmal ausgeführt werden - und ein Fehler - Testcode funktioniert, aber die falsche Antwort produziert.
Fehler sind ein schwerwiegendes Problem mit Ihrem Code.
Fehler sind nur Fehler, die behoben werden müssen.
Wenn Sie laufen
import unittest
class Test_Unittest(unittest.TestCase):
def test_assert(self):
assert False
def test_assertFalse(self):
self.assertFalse(True)
if __name__ == '__main__':
unittest.main()
Sie die gleichen Protokollinformationen zu erhalten, die gleiche failure:
FF
======================================================================
FAIL: test_assert (__main__.Test_Unittest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/unutbu/pybin/test.py", line 6, in test_assert
assert False
AssertionError
======================================================================
FAIL: test_assertFalse (__main__.Test_Unittest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/unutbu/pybin/test.py", line 8, in test_assertFalse
self.assertFalse(True)
AssertionError
----------------------------------------------------------------------
Ran 2 tests in 0.000s
FAILED (failures=2)
Der Grund beide das gleiche behandelt werden, weil unittest.TestCase
definiert
failureException = AssertionError
Wenn Sie assert False
sagen, wird ein AssertionError ausgelöst. Wenn Sie self.assertFalse(True)
sagen, wird failureExeception
ausgelöst.
Da diese Ausnahmen identisch sind, gibt es keinen offensichtlichen Unterschied.
assert
und self.assertFalse
unterscheiden sich jedoch in der herkömmlichen Verwendung.
assert
wird verwendet, um zu deklarieren, dass eine bestimmte Bedingung an einem bestimmten Punkt im Code gelten soll. Es wird während der Entwicklung als Krücke verwendet, ist jedoch nicht für die Verwendung in Produktionscode gedacht. Wenn Sie python -O my_unittest.py
ausführen, werden alle assert-Anweisungen ignoriert. Dies würde Ihre beabsichtigte Verwendung von assert
untergraben, wodurch möglicherweise Ihre Komponententests auch bei einem Fehler bestanden werden.
Auch wenn (ohne das -O-Flag) das Ergebnis gleich ist, ist assert
nicht für die Verwendung im Komponententestcode gedacht. Verwenden Sie self.assertTrue
oder self.assertFalse
beim Schreiben von Komponententests.
anstelle von 'self.assertFalse (True) 'Sie können (und sollten wahrscheinlich)' self.fail() 'verwenden. – freaker
Ein Punkt die Antworten bisher versäumt haben, zu erwähnen ist, dass es mehrere Test-Frameworks (zB py.test und nose), die Selbstbeobachtung Magie Verwendung Python, damit Sie Unit-Tests wie so schreiben:
# test_this_and_that.py
def test_frobber():
assert frobber('x') == 'y'
# EOF
ohne Sie müssen einen der oben genannten untestest boilerplate eingeben. In einigen Fällen kann es auf ein Framwork/Stilproblem hinauslaufen.
- 1. Was sind die Vorteile der verschiedenen Endianess?
- 2. Was sind die Vorteile der funktionalen Programmierung?
- 3. Was sind die Vorteile der Selbstverkapselung?
- 4. Was sind die Vorteile/Vorteile der Verwendung von Python 3?
- 5. Was sind die Vorteile der Kotlin Programmiersprache?
- 6. Was sind die Vorteile der Verwendung von plpgsql in Postgresql
- 7. Was sind die Vorteile von Lazy Evaluation?
- 8. Was sind die Vorteile von NSBinaryStoreType?
- 9. Was sind die Vorteile der Verwendung des Schlüsselwortes "this"?
- 10. Was sind die Vorteile von Persistenz Ignoranz?
- 11. Was sind die Vorteile einer Hypervisor-VM?
- 12. Was sind die Vorteile eines Fehlers?
- 13. Was sind die größten Vorteile von LLVM?
- 14. Was sind die Vorteile der Sperrwarteschlange in Java?
- 15. Was sind die Vorteile einer aktualisierten sitemap.xml?
- 16. Was sind die Vorteile von Conduit-Resten?
- 17. Was sind die Vorteile von "Staircase" Branching?
- 18. Was sind die Vorteile von Asynchronous HTTP
- 19. Was sind die Vorteile verwenden Scrapyd? doc
- 20. Was sind die Vorteile von Inline-Javascript?
- 21. Was sind die Vorteile von Java?
- 22. Was sind die Vorteile von VistaDB
- 23. Was sind die Vorteile von Auto-Mapper?
- 24. Was sind die relativen Vorteile von wxHaskell und Gtk2HS?
- 25. Was sind die Vorteile von Subversion?
- 26. Was sind die Vorteile von Ressourcendateien (.resx)?
- 27. Asse Dateien in Symfony sind hinter der Firewall?
- 28. Was sind die Vorteile bei der Verwendung von Qt?
- 29. Was sind die Vorteile/Nachteile der Verwendung eines CTE?
- 30. Was sind die Vorteile von debug_and_release Konfigurationsfeature in qmake?
Danke, das macht nützlich zu wissen, muss ich die 'assert False'-Zeilen entfernen. +1 – chrissygormley
Hallo, das ist anscheinend falsch. Der Test-Runner sollte "AssertionError" erfassen (und tut dies) und sie korrekt als Testfehler melden. – wim