全球在django测试框架中设置?

时间:2010-03-03 19:11:51

标签: python django testing

是否有某种方式(使用标准的Django.test.TestCase框架)执行某些变量的全局初始化,因此它只发生一次

放置setUp()使得变量在每次测试之前被初始化,这在设置涉及昂贵的操作时会导致性能下降。我想运行一次安装类型功能,然后让我在所有测试中看到初始化的变量。

我不想重写测试运行器框架。

我正在考虑类似于Ruby / RSpec世界中的before(:all)。

-S

3 个答案:

答案 0 :(得分:4)

您不需要“重新编写整个测试运行器框架”,但您需要创建自定义test_runner(您只需copy the existing one并修改它以包含您的全局设置代码)。这是大约100行代码。然后将TEST_RUNNER设置设置为指向您的自定义转轮,然后离开。

答案 1 :(得分:2)

setUpClass()在较新版本的python / django中部分解决了这个问题,这至少可以让我运行类级设置。

答案 2 :(得分:0)

具有静态变量的类怎么样? 类似的东西:

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)