是否有某种方式(使用标准的Django.test.TestCase框架)执行某些变量的全局初始化,因此它只发生一次。
放置setUp()使得变量在每次测试之前被初始化,这在设置涉及昂贵的操作时会导致性能下降。我想运行一次安装类型功能,然后让我在所有测试中看到初始化的变量。
我不想重写测试运行器框架。
我正在考虑类似于Ruby / RSpec世界中的before(:all)。
-S
答案 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)