2017-03-14 4 views
0

Die Unit-Test mit der folgenden Ausnahme fehlschlägt:Assertion schlägt mit demselben Objekt

def test_question_form(self): 
    question = Question(question_text='Dummy question', pub_date=timezone.now(
    ) + datetime.timedelta(days=1), allow_multiple_choices=True) 
    question_form = QuestionForm(
     {'question_text': question.question_text, 'pub_date': question.pub_date, 'allow_multiple_choices': 'on' if question.allow_multiple_choices else 'off'}) 
    self.assertTrue(question_form.is_valid()) 
    self.assertEqual(question_form.save(commit=False), question) 

AssertionError: <Question: Dummy question> != <Question: Dummy question>

Nach einiger manueller Behauptung das Objekt scheint gleich zu sein, was mache ich falsch?

+1

Sie wahrscheinlich zwei Instanzen von „Dummy Fragen“ erstellt Objekte –

Antwort

2

Da Ihre Instanzen nicht gespeichert werden, wird die Modellinstanz durch form.save mit commit=False und dem Original nicht gespeicherte Objekt zurückgegeben wird nie gleich sein (außer Sie die __eq__ Methode des Modells außer Kraft setzen, dies zu umgehen):

Vom docs :

die Gleichheit Verfahren ist so definiert, dass Fälle mit demselben Primärschlüsselwert und der gleichen konkreten Klasse gleich betrachtet werden, außer daß Instanzen mit einem prim ary Schlüsselwert von None sind zu nichts außer sich selbst nicht gleich

+0

Was eine Lösung für diese Ausnahme von Überschreiben der gleichen Methode wäre? Muss ich alle Modellmitglieder manuell aktivieren? – R3turnz

+0

Siehe [compare-object-instances-for-equal-in-python-attributes-in-python] (http://stackoverflow.com/questions/1227121/compare-object-instances-for-e-quality-by-their- Attribute in Python –

Verwandte Themen