Django нужен установочный код, чтобы работали модульные тесты на моделях, которым нужна база данных.Стандартный модульный тест Django делает это в фоновом режиме, но не в Visual Studio.Я не нашел хорошего способа предоставить установочный код, который будет работать для запуска тестов из Visual Studio Test Explorer и с django manage.py test
.Visual Studio Test Explorer не вызывает ни 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.Я бы тоже не хотел, потому что я хочу создать тестовую базу данных только один раз, а не повторно для всех тестовых классов.Я не могу не думать, что делаю это совершенно неправильно ...