Mit Blick auf die Python unittest
documentation und auch aus dem Haufen Django Unitests, die ich hier einmal tun musste, sind meine Ergebnisse.
USE CASE:
Das erste, was die einfachste Sache ist, und meiner Meinung nach der größte Unterschied zwischen den beiden ist die Fälle, in denen Sie jeden Befehl verwenden können. Sie sind beide im Fall einer Testklasse austauschbar verwendbar. Um den Befehl assertIn
zu verwenden, müssen Sie jedoch die Bibliothek unittest importieren. Also, ich möchte wissen, ob h
in hello
ist. Eine einfache Möglichkeit, es durch den assertIn
Befehl zu tun ist:
class MyTestCase(unittest.TestCase):
def is_h_in_hello(self):
self.assertIn("h", "hello")
und dann brauche ich Tests auszuführen, dass durch unittest.main()
in diesem Beispiel ist, um meine Antwort zu bekommen. Aber mit dem Befehl assert
ist es viel einfacher zu sehen, ob h
in hello
ist. Das ist sehr einfach so gemacht:
assert "h" in "hello"
Aber im Wesentlichen werden beide mir die gleiche Antwort geben. Was jedoch die beiden Methoden unterscheidet, ist die Einfachheit der Verwendung in der zweiten Methode.
ERGEBNISSE:
Der zweite Unterschied Ich war die Lesbarkeit der Ergebnisse auf Python-Shell gefunden. Die Bibliothek unittest
ist so konzipiert, dass die Befehle sehr spezifisch sind. Wenn ein Test fehlschlägt, erhalten Sie eine sehr klare Nachricht, die sagt, was falsch gelaufen ist. Sagen Sie jetzt, Sie möchten sehen, ob b
in hello
ist. es durch die Klassenmethode zu tun (einfach "h"
-"b"
zu ändern), die Botschaft, die wir nach der Durchführung des Tests erhalten ist:
AssertionError: 'b' not found in 'hello'
----------------------------------------------------------------------
Ran 1 test in 0.038s
FAILED (failures=1)
es Ihnen also sehr klar sagt: 'b' not found in 'hello'
, die es sehr bequem, um zu sehen, was genau macht, ist das Problem. Aber sagen Sie, dass Sie den gleichen Prozess über den assert
Befehl ausführen.Die Fehlermeldung ist so etwas wie:
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
assert "b" in "hello"
AssertionError
Obwohl Sie den Fehlertyp (AssertionError
) erzählt, und die Rückverfolgung, es nicht ausdrücklich sagen, dass "b" is NOT in "hello"
. In diesem einfachen Fall ist es sehr einfach, den Traceback zu betrachten und zu sagen, oh, es gibt kein b in hallo! In komplizierteren Fällen kann es jedoch schwierig sein zu erkennen, warum diese Fehlermeldung generiert wurde.
Insgesamt sind die beiden Methoden sehr ähnlich und werden Ihnen das gewünschte Ergebnis bringen, aber im Wesentlichen kommt es auf die kleinen Unterschiede hier und da an, mit weniger Codezeilen und wie einfach die Shell-Nachrichten sind.
Überprüfen Sie [diese] (https://stackoverflow.com/questions/2958169/what-are-the-advantages-difference-in-assert-false-and-self-assertfalse) Frage – Andersson