Ich schreibe einige Python Unit Tests mit dem "unittest" Framework und führe sie in PyCharm aus. Einige der Tests vergleichen eine lange generierte Zeichenfolge mit einem Referenzwert, der aus einer Datei gelesen wird. Wenn dieser Vergleich fehlschlägt, möchte ich das Diff der beiden verglichenen Strings mit PyCharms diff viewer sehen.PyCharm zeigt vollen Unterschied, wenn Unittest für mehrzeilige Zeichenfolge fehlschlägt?
So ist der der Code wie folgt aus:
actual = open("actual.csv").read()
expected = pkg_resources.resource_string('my_package', 'expected.csv').decode('utf8')
self.assertMultiLineEqual(actual, expected)
Und PyCharm identifiziert schön den Test als gescheitert und stellt einen Link im Fenster Ergebnisse klicken, die den Diff-Viewer öffnet. Jedoch darauf zurückzuführen, wie Unittest die Ergebnisse verkürzt, ich Ergebnisse zu erzielen, wie dies in dem Diff-Viewer:
Linke Seite:
‚time [57 Zeichen] ercent 0; 1; 1; 1; 1; 1; 1; 1 0; 2; 1; 3; 4; 2; 3; 1 0; 3; [110 Zeichen] 32 '
Rechte Seite:
' time [57 Zeichen] ercen 0; 1; 1; 1; 1; 1; 1; 1 0; 2; 1; 3; 4; 2; 3; 1 0; 3; 2 [109 Zeichen] 32 '
Jetzt möchte ich alle [X Zeichen] Teile loswerden und nur die ganze Datei (en) und das tatsächliche Diff sehen, vollständig visualisiert von PyCharm.
Ich habe versucht, in Unittest-Code zu suchen, konnte jedoch keine Konfigurationsoption zum Drucken voller Ergebnisse finden. Es gibt einige Variablen wie maxDiff und _diffThreshold, aber sie haben keinen Einfluss auf diesen Ausdruck.
Auch habe ich versucht, dies in py.test auszuführen, aber dort war die Unterstützung in PyCharm noch weniger (keine Links sogar zu fehlgeschlagenen Test).
Gibt es einen Trick mit dem Difflib mit Unittest oder vielleicht ein paar andere Tricks mit einem anderen Python-Test-Framework, um dies zu tun?
Dies ist nicht auf PyCharm bezogen, noch py.test.Die gleichen Dinge passieren, wenn Python3.4-Unittests von der Kommandozeile aus ausgeführt werden, mit dem einfachen alten "python -m unittest" –
. Weder ist es mit assertMultiLineEqual verwandt - ich sehe das gleiche Verhalten für plain alten assertEqual. –
Die abgekürzten (fehlenden) Teile jedes Strings sind nicht garantiert in beiden Strings gleich (wenn dies der Fall wäre, wäre dieses Verhalten meist gutartig). Aber das oben in der Frage gezeigte Beispiel zeigt, dass die erste Zeichenfolge [110 Zeichen] weggelassen wurde, wobei die zweite Zeichenfolge [109 Zeichen] weggelassen wurde. Daher können die ausgelassenen Strings möglicherweise nicht gleich sein. Warum abkürzen, wenn der fehlende Teil einen Teil des Diffs enthält !? –