Я использую Django 1.8. Я писал тесты для своего Django API в одном длинном файле с именем test_api.py
. Структура файла было следующим:Django: Разделить тесты на несколько файлов, но использовать одну и ту же базу данных?
def setUpModule():
management.call_command('loaddata', 'frontend/fixtures/data.json',
verbosity=0)
management.call_command('my_custom_command')
def tearDownModule():
management.call_command('flush', verbosity=0, interactive=False)
class TestAPIBNFViews(TestCase):
def test_api_view_list_all(self):
url = '/api/1.0/bnf_code'
# do testing
def test_api_view_query(self):
# more testint
приспособления и руководство команды загружаются один раз, прежде чем все испытания бежать, и до сих пор это работало большое.
Теперь, однако, файл становится длинным и громоздким, и я хочу разбить его на несколько файлов. Я создал несколько файлов под названием test_list
и test_query
и дал каждому раздел setUpModule
, как указано выше.
Однако, во-первых, это не DRY, а во-вторых, когда я бегу python manage.py test
, много испытаний неудачу с дублированием иностранных ключевых ошибок, таких как:
ProgrammingError: relation "frontend_sha_id" already exists
Я думаю, это не удивительно, так как тесты пытаются создать тестовую базу данных несколько раз.
Однако, если я удалю setUpModule
из всех, кроме первого теста (в алфавитном порядке по имени файла), другие тесты потерпят неудачу, потому что они не могут видеть какие-либо данные.
Как я могу запустить setUpModule
один раз, прежде чем все тесты будут выполнены, и по-прежнему держать тесты в отдельных файлах для удобства?
Быстрое и грязное решение: в каждом файле перед запуском создания базы данных вы можете проверить, не существует ли она еще. –
Я предполагаю, что у меня мог бы быть один файл с именем 'test_all.py', и я мог бы импортировать все остальное в качестве модуля ... это сработает? – Richard