2017-03-14 65 views
0

单元测试失败,出现以下异常:断言失败与同一对象

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>

一些手工断言对象似乎是相等后,我究竟做错了什么?

+1

你可能创建“虚拟问题”的2个实例对象 –

回答

2

由于你的情况下,不保存,(除非您覆盖模型的__eq__方法来处理这个问题)通过form.savecommit=False和原未保存的对象返回的模型实例永远不会相等:

docs

的平等方法被定义为使得具有相同 主键值和相同的混凝土类实例被认为是相等的,除了 用整洁该实例的None进制键的值不等于除了自己什么

+0

将是解决这一什么,除了重写等方法吗?我是否必须手动声明所有模型成员? – R3turnz

+0

请参阅[比较对象实例的相等在python中的他们的属性](http://stackoverflow.com/questions/1227121/compare-object-instances-for-equality-by-their-属性功能于蟒) –