Django测试框架中的全局设置?
有没有什么办法(使用标准的Django.test.TestCase框架)可以全局初始化某些变量,让这个初始化只发生一次呢?
如果把这些变量放在setUp()里,就会在每个测试之前都初始化一次,这样会影响性能,特别是当初始化的过程比较耗时的时候。我希望能有一个类似于初始化的功能,只运行一次,然后这些变量在我的所有测试中都能被使用。
我不想重写测试运行框架。
我想要的功能有点像Ruby/RSpec中的before(:all)。
-S
3 个回答
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)
3
在更新版本的Python和Django中,部分解决了这个问题,使用setUpClass()方法可以让我在类级别上进行一些准备工作。
4
你不需要“重写整个测试运行框架”,但你需要创建一个自定义的测试运行器(你可以直接复制现有的代码,然后修改它,加入你的全局设置代码)。这大约需要100行代码。接着,把TEST_RUNNER的设置指向你的自定义运行器,这样就可以开始了。