Запустите модульные тесты Django из пользовательской команды управления - PullRequest
3 голосов
/ 29 апреля 2011

Раньше у меня был автономный скрипт с некоторыми юнит-тестами для проверки данных в нашей базе данных.Я не использовал встроенный инструмент тестирования Django, так как это создаст пустую базу данных тестирования, а это не то, что мне нужно.

В этом сценарии я создал три различных класса, расширяющих unittest.TestCase, содержащих некоторые тестовые функциинепосредственно выполняемые операторы SQL.

Теперь я предпочел бы иметь возможность прямого доступа к Django ORM.Самый простой способ сделать это - через пользовательский коммент управления (./manage.py datatests).

В автономном скрипте я могу вызвать все модульные тесты с помощью следующей функции:

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

Этообнаружит все тесты в текущем файле и выполнит их.

Как я могу сделать эквивалентную вещь (запустить несколько наборов тестов) из пользовательской команды управления Django?

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

Прошу прощения, что долго не искал ответ, прежде чем спрашивать, но я сам нашел решение этой проблемы в другом ответе Stackoverflow:

По сути, вместо unittest.main() может использоваться следующий код:

suite = unittest.TestLoader().loadTestsFromTestCase(TestCaseClass)
unittest.TextTestRunner(verbosity=2).run(suite)

Это загрузит все тесты в указанном TestCaseClass. Если вы хотите загрузить все тесты в текущем модуле, поможет создание пакета следующим образом:

suite = TestLoader().loadTestsFromName(__name__)

Ответ Stackoverflow, связанный выше, содержит полный пример. Более того, раздел Basic Example модуля unittest docs описывает то же самое. Другие варианты загрузки тестов см. В Загрузка и запуск тестов в документах .

.
1 голос
/ 05 мая 2011

Возможно, вы захотите указать содержимое вашей стартовой базы данных через fixtures. Это загрузит контекст для БД для конкретного теста. И вы можете сделать снимок БД с

$ ./manage.py dumpdata my_app > fixtures/my_pre_test_db.json`

Теперь в вашем тестовом модуле у вас будет что-то вроде этого:

class MyTestCase(TestCase):
    fixtures = ['fixtures/my_pre_test_db.json']

    def testThisFeature(self):
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...