TypeError при тестировании программы проверки ответов
Я пишу тест для моей "программы проверки ответов", поэтому я создал тестовый вопрос и хочу проверить, работает ли программа проверки результатов, давая правильный ответ (поэтому тест должен пройти).
У меня возникли проблемы с ошибкой, которую я получил. Я знаю, что код не очень хороший, но я новичок в этой области. Мне кажется, что я что-то не так понял в логике. Может ли кто-нибудь помочь? :)
Ошибка:
correct = QuestionMultipleChoice.correct_answer()
TypeError: 'property' object is not callable
Тест (последние строки неправильные, я знаю):
@when(u'I give an answer to a Multiple choice question')
def save_object(context):
lab1 = Lab.objects.create(lab_name="testlab", pub_date=datetime.now(), lab_theory="test theory")
question1 = QuestionMultipleChoice.objects.create(lab=lab1, question='This is a test question', option1='1', option2='2', option3='3', option4='4', answer=1)
@then(u'I should get true if answer is correct')
def should_have_only_one_object(self):
given = 1
correct = QuestionMultipleChoice.correct_answer()
QuestionMultipleChoice.check_answer(correct, given)
assert 1 == Lab.objects.count()
Models.py
class QuestionMultipleChoice(models.Model):
lab = models.ForeignKey(Lab, on_delete=models.CASCADE)
type = QuestionType.multiplechoice
question = models.CharField(max_length=200,null=True)
option1 = models.CharField(max_length=200,null=True)
option2 = models.CharField(max_length=200,null=True)
option3 = models.CharField(max_length=200,null=True)
option4 = models.CharField(max_length=200,null=True)
answer = models.IntegerField(max_length=200,null=True)
def __str__(self):
return self.question
@property
def html_name(self):
return "q_mc_{}".format(self.pk)
@property
def correct_answer(self):
correct_answer_number = int(self.answer)
correct_answer = getattr(self, "option{}".format(correct_answer_number))
return correct_answer
def check_answer(self, given):
return self.correct_answer == given
Вам просто нужно убрать скобку после correct_answer
, так как это свойство, а не метод.
Попытка:
@then(u'I should get true if answer is correct')
def should_have_only_one_object(self):
given = 1
correct = QuestionMultipleChoice.correct_answer
QuestionMultipleChoice.check_answer(correct, given)
assert 1 == Lab.objects.count()