Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django测试框架中的全局设置?_Python_Django_Testing - Fatal编程技术网

Python django测试框架中的全局设置?

Python django测试框架中的全局设置?,python,django,testing,Python,Django,Testing,是否有某种方法(使用标准的Django.test.TestCase框架)来执行某些变量的全局初始化,以便只发生一次 通过put things setUp()可以在每次测试之前初始化变量,当设置涉及昂贵的操作时,这会降低性能。我想运行一次安装类型功能,然后让这里初始化的变量对我的所有测试都可见 我不想重写testrunner框架 我在想Ruby/RSpec世界中类似于before(:all)的东西 -S您不需要“重新编写整个测试运行程序框架”,但需要创建一个自定义的测试运行程序(您只需修改它以包含

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

通过put things setUp()可以在每次测试之前初始化变量,当设置涉及昂贵的操作时,这会降低性能。我想运行一次安装类型功能,然后让这里初始化的变量对我的所有测试都可见

我不想重写testrunner框架

我在想Ruby/RSpec世界中类似于before(:all)的东西

-S

您不需要“重新编写整个测试运行程序框架”,但需要创建一个自定义的测试运行程序(您只需修改它以包含全局设置代码)。大约有100行代码。然后将设置设置为指向自定义跑步者,然后离开


    • 一个带有静态变量的类怎么样? 比如:

      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()函数部分解决了这个问题。