Python django测试框架中的全局设置?
是否有某种方法(使用标准的Django.test.TestCase框架)来执行某些变量的全局初始化,以便只发生一次 通过put things setUp()可以在每次测试之前初始化变量,当设置涉及昂贵的操作时,这会降低性能。我想运行一次安装类型功能,然后让这里初始化的变量对我的所有测试都可见 我不想重写testrunner框架 我在想Ruby/RSpec世界中类似于before(:all)的东西 -S您不需要“重新编写整个测试运行程序框架”,但需要创建一个自定义的测试运行程序(您只需修改它以包含全局设置代码)。大约有100行代码。然后将设置设置为指向自定义跑步者,然后离开Python django测试框架中的全局设置?,python,django,testing,Python,Django,Testing,是否有某种方法(使用标准的Django.test.TestCase框架)来执行某些变量的全局初始化,以便只发生一次 通过put things setUp()可以在每次测试之前初始化变量,当设置涉及昂贵的操作时,这会降低性能。我想运行一次安装类型功能,然后让这里初始化的变量对我的所有测试都可见 我不想重写testrunner框架 我在想Ruby/RSpec世界中类似于before(:all)的东西 -S您不需要“重新编写整个测试运行程序框架”,但需要创建一个自定义的测试运行程序(您只需修改它以包含
- 一个带有静态变量的类怎么样?
比如:
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)
在较新版本的python/django中,setUpClass()部分解决了这一问题,它至少允许我运行类级安装程序。Right—我试图避免使用自定义测试运行程序—看起来我没有选择余地。我与Django合作越多,就越怀念Rails。Python有更好的科学图书馆支持,所以我想我可以忍受它。我认为测试转发器曾经是像15-30行的代码在旧Django版本,所以他们可能不认为这是一件大事,复制它,并创建一个新的。它变成了一个完整的类,并在以后的版本中不断扩大。您始终可以建议添加一个功能请求,以运行一些额外的设置代码(可能在setup_test_environment()中),而无需指定一个全新的运行程序(额外的设置或全局信号)?再次感谢您提供的提示-我正在寻找一种很好的声明性方法来按照setup()的思路执行此操作但看起来我可能得安排一个跑步者。功能请求是有意义的。@Shredd,您好,django是否接受您的新功能请求?我还想要一个这样的功能。@linebreak-对不起,最初的问题/答案是2010年的,这可能是我最后一次真正使用Django(可能会为v1.8开始一个新问题?嗨,Maazza-是的,可以通过设置静态变量或类变量来解决这个问题。但是,我正在寻找一个声明性内置解决方案。在较新版本的python中,似乎通过setUpClass()函数部分解决了这个问题。