TestCase self.assertEqual与类似的字符串不匹配

时间:2016-05-03 20:26:33

标签: python django-testing django-unittest django-tests

我正在尝试为ManyToMany关系创建模型单元测试。 目的是检查表中是否保存了正确的类别。

class IngredientModelTest(TestCase):
    def test_db_saves_ingredient_with_category(self):
        category_one = IngredientsCategory.objects.create(name='Food')
        first_Ingredient = Ingredient.objects.create(name='Apple')
        first_Ingredient.categories.add(category_one)

        category_two = IngredientsCategory.objects.create(name='Medicine')
        second_Ingredient = Ingredient.objects.create(name='Antibiotics')
        second_Ingredient.categories.add(category_two)

        first_ = Ingredient.objects.first()
        self.assertEqual('Apple', first_.name)
        self.assertEqual(first_.categories.all(), [category_one])
        self.assertEqual(first_, first_Ingredient)

对于第二行的self.asserEqual(first_.categories.all(), [category_one])我得到了这个奇怪的断言:

AssertionError: [<IngredientsCategory: Food>] != [<IngredientsCategory: Food>]

我尝试了许多其他不同的方法,但没有一种方法有效。有没有人想我如何获得first_.categories.all()的信息来与其他东西进行比较?

1 个答案:

答案 0 :(得分:1)

那是因为他们不相等 - 一个是QuerySet,另一个是list - 他们碰巧有相同的str表示

您可以将QuerySet转换为包含list(first_.categories.all())的列表,或者针对此情况的可能解决方案可能是:

self.assertEqual(first_.categories.get(), category_one)