两个测试单独工作,但不在一起

2024-03-28 20:22:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我在不同的班级里有两个测试,测试相似的行为:

  1. 在带有Client()的书签中添加产品。你知道吗
  2. 使用ORM在书签中添加产品。你知道吗

就个人而言,它起作用了:

./manage.py test compare.test.CompareBookmarkTests

或者

./manage.py test compare.test.CompareAccountTests

它们一起发射时失败:

./manage.py test

我试着:

  • 使用setUptearDown方法
  • 类和方法的变更顺序
  • 在我尝试诊断问题时使用--reverse
  • 在带有测试数据库的交互式django shell中启动代码行(并且它正在工作)
  • 做一些打印调试,我的对象是从测试数据库正确调用的。你知道吗
  • 将这两个类合并为一个类

目前,我还没有找到有关stackoverflow的相关答案。django文档中也没有。你知道吗


from django.contrib.auth.models import User
from django.test import TestCase
from .models import Bookmark, Categorie, Product


class CompareBookmarkTests(TestCase):
    def setUp(self):
        Categorie.objects.create(id_categorie='someid', name='somename')
        p = Categorie.objects.get(pk='someid')
        p.product_set.create(id_product='1', product_name='orange', categorie='someid')
        User.objects.create_user('john@sign.in', 'john@sign.in', 'smith')

    def tearDown(self):
        User.objects.all().delete()
        Categorie.objects.all().delete()
        Bookmark.objects.all().delete()

    def test_redirect_logged(self):
        self.client.login(username='john@sign.in', password='smith')

        # Adding product with id 1 in bookmark
        response = self.client.get('/compare/1/bookmark/')

        # Get added product form bookmark
        bookmark = Bookmark.objects.get(pk=1)
        self.assertEqual(str(bookmark), 'Bookmark object (1)')
        self.assertEqual(response.status_code, 302)


class CompareAccountTests(TestCase):
    def setUp/tearDown: [same as previous class]

    def test_get_product(self):
        self.client.login(username='john@sign.in', password='smith')

        user = User.objects.get(pk=1)
        product = Product.objects.get(pk='1')

        # Adding product with id 1 in bookmark
        add_bookmark = Bookmark.objects.create(id_result=product, user=user)

        bookmark = Bookmark.objects.get(pk=1)
        response = self.client.get('/compare/account/')
        self.assertEqual(str(bookmark), 'Bookmark object (1)')
        self.assertEqual(response.status_code, 200)

我希望两个测试在一起启动时都能成功,但我得到:

compare.models.Bookmark.DoesNotExist: Bookmark matching query does not exist.

带--反转:

django.contrib.auth.models.User.DoesNotExist

这可能是初学者的错误,但我看不出来,谢谢你的帮助!你知道吗


Tags: djangointestselfidgetobjectsmodels
1条回答
网友
1楼 · 发布于 2024-03-28 20:22:27

我已经找到了可能导致问题的原因:

我使用psql并找到了未删除的测试数据库:

test_myprojet_1
test_myprojet_2
test_myprojet_3
test_myprojet_4
...and so on...

除了一个非常奇怪的问题:

test_test_test_test_test_test_test_test_test_test_test_myprojec[truncated name]

我用在psql

DROP DATABASE [name];

现在,我的测试按预期进行!你知道吗

多亏了awesoon,你的建议使我走上了正轨。你知道吗

相关问题 更多 >