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设置。我也不想这样做,因为我只想创建一次测试数据库,而不是为所有测试类重复创建一次。
有人有见识吗?我忍不住以为自己在做这件事完全错了...