глобальная настройка в рамках тестирования Django? - PullRequest
12 голосов
/ 03 марта 2010

Есть ли какой-либо способ (с использованием стандартной структуры Django.test.TestCase) выполнить глобальную инициализацию определенных переменных, чтобы это происходило только один раз .

Установка вещей setUp () делает так, чтобы переменные инициализировались перед каждым тестом, что снижает производительность, когда установка требует дорогостоящих операций. Я хотел бы запустить функцию типа установки один раз, а затем инициализировать переменные, которые будут отображаться здесь, чтобы они были видны всем моим тестам.

Я бы предпочел не переписывать среду выполнения тестов.

Я думаю о чем-то похожем на before (: all) в мире Ruby / RSpec.

-S

Ответы [ 3 ]

4 голосов
/ 04 марта 2010

Вам не нужно «переписывать всю среду выполнения тестов», но вам нужно будет создать собственный test_runner (вы можете просто скопировать существующий и изменить его, чтобы включить ваши глобальные настройки код). Это около 100 строк кода. Затем установите параметр TEST_RUNNER , чтобы он указывал на вашего произвольного бегуна, и все готово.

2 голосов
/ 04 июля 2013

Это частично решается в более новых версиях python / django с помощью setUpClass (), который, по крайней мере, позволит мне запустить установку на уровне класса.

0 голосов
/ 25 июня 2013

А как насчет класса со статическими переменными? Что-то вроде:

class InitialSetup(object):
    GEOLOCATOR = GeoLocator()
    DEFAULT_LOCATION = GEOLOCATOR.get_geocode_object(settings.DEFAULT_ADDRESS, with_country=True)

    def setUp(self):
        self.geolocator = InitialSetup.GEOLOCATOR
        self.default_location = InitialSetup.DEFAULT_LOCATION
        p = Page.objects.create(site_id=settings.SITE_ID, template='home_page.html')
        p.publish()
        self.client = Client()


class AccessTest(InitialSetup, Testcase):  # Diamond inheritance issue! inheritance order matters
    def setUp(self):
        super(AccessTest, self).setUp()


    def test_access(self):
        # Issue a GET request.
        response = self.client.get('/')

        # Check that the response is 200 OK.
        self.assertEqual(response.status_code, 200)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...