Hallo Ich bin neu in der Programmierung und und versuchen, einen Test zu machen, der prüft, ob Elemente in einer Liste von Elementen vorhanden sind eine andere Liste (mit Unittest in Python 2.7).Unittest - Assert eine Reihe von Elementen einer Liste sind (oder nicht) in einer anderen Liste enthalten
Zum Beispiel wenn ich eine Liste ["Hund", "Katze", "Frosch"] habe und das Ergebnis der Methode die ich teste ist ["Tiger", "Löwe", "Känguru", "Frosch"] möchte, dass der Test fehlschlägt, weil er eines der Elemente der vorherigen Liste enthält ("Frosch"). Ich möchte auch, dass der Test mir sagt, welche Wörter beide Listen hatten (d. H. Welche Wörter den Test als einen Fehler verursacht haben).
Ich habe versucht:
self.assertIn(["cat", "dog"], method("cat dog tiger"))
Das Ergebnis des Verfahrens ist [ „Katze“, „Hund“, „tiger“] noch das Ergebnis des Tests wird ein fehlschlagen und sagt:
AssertionError: ['cat', 'dog'] not found in ['cat', 'dog', 'tiger']
Ich möchte, dass dieser Test OK zurückgibt, weil "Katze" und "Hund" in der zweiten Liste vorhanden sind. Es scheint assertIn tut nicht, was ich dachte, es würde tun (ich dachte, es war zu überprüfen, ob eines von ein in b vorhanden sind).
Und umgekehrt, übergibt assertNotIn, wenn ich will, dass es fehlschlägt.
Ich habe schon eine Weile gesucht, aber weil ich nicht sicher bin, wonach ich suche, ist es schwer zu finden.
Vielen Dank für das Lesen, ich hoffe, das macht Sinn.
EDIT: Ich habe mit Chris Lösung gegangen und es funktioniert, wie ich will:
def myComp(list1, list2):
section = list(set(list1).intersection(list2))
die Liste der Wörter zu erhalten, die (dh Auslösen der Fail) in der Fehlermeldung überlappen, habe ich die Code unten von hier How to change the message in a Python AssertionError?:
try:
assert(len(section)==0)
except AssertionError as e:
e.args += ('The following are present in the processed text',
section)
raise
Das Ergebnis ist genau das, was ich will:
AssertionError: ('The following are pressent in the processed text', ['dog',
'cat'])
die Liste '[ 'Katze', 'Hund'] 'ist nicht gefunden in der Liste '['cat', 'dog', 'tiger']' versuche 'print ['a'] in ['a']' in einer Eingabeaufforderung - es ist falsch, weil die Liste nicht in der Liste ist, und es macht keinen elementweisen Vergleich. – Stael