Visual Studio 2017或2019中的Django单元测试:

时间:2018-12-08 02:17:57

标签: python django visual-studio-2017 django-unittest visual-studio-2019

Django需要设置代码,因此可以在需要数据库的模型上进行单元测试。标准Django单元测试可以在后台静默地执行此操作,但不能在Visual Studio中执行。我还没有找到提供可用于从Visual Studio Test Explorer和django manage.py test开始测试运行的安装代码的好方法。 Visual Studio测试资源管理器不会调用setUpModule / tearDownModule或tearDownClass。以下代码可在VS中使用,但我发现它很丑陋,并且不适用于鼻子/ Django-nose:

import os
import django
import unittest
from django.test.utils import setup_test_environment, teardown_test_environment
from django.test.utils import setup_databases, teardown_databases

try:
    os.environ["DJANGO_SETTINGS_MODULE"] = "config.settings.test"
    setup_test_environment()
    print("Called setup_test_environment()")
    django.setup()
    old_config=setup_databases(1,False)
except:
    old_config=None

def tearDownModule():
    try:
        global old_config
        if old_config:
            teardown_test_environment()
            print("Called teardown_test_environment()")
            teardown_databases(old_config,1,False)
    except:
        pass

from unittest import TestCase # This needs to be called after django.setup 
from konsenser.models import Poll   

class PollTest(TestCase):

    @classmethod
    def setUpClass(cls):
        print("Setting up class")
        return super().setUpClass()

    @classmethod
    def tearDownClass(cls):
        print("Tearing down class")
        return super().setUpClass()


    def setUp(self):
        Poll.objects.create(name='Test Poll', description='for testing')

    def test_content(self):
        poll=Poll.objects.get(id=1)
        name=f'{poll.name}'
        description=f'{poll.description}'
        self.assertDictEqual({'name':name,'description':description },
                             {'name':'Test Poll','description':'for testing'})


if __name__ == '__main__':
    unittest.main()

由VS Test Explorer运行时,输出为

Called setup_test_environment()
Creating test database for alias 'default'...
Setting up class

因此它不会通过我的函数/方法删除。我无法将django.setup()粘贴到setUpClass中,因为模型导入已经需要django设置。我也不想这样做,因为我只想创建一次测试数据库,而不是为所有测试类重复创建一次。

有人有见识吗?我忍不住以为自己在做这件事完全错了...

0 个答案:

没有答案