在django中测试:TestCase类中setUpClass,setUpTestData和setUp之间有什么区别?

Rai*_*yan 18 python testing django

之间有什么区别setUpClass,setUpTestData并且setUpTestCase上课吗?

更具体地说,每个用例有哪些?

到目前为止我所理解的:

setUpClass

  • 在测试类中的所有测试之前,此方法运行一次

setUpTestData

  • 如果DB具有事务支持,则此方法运行一次.否则它会在每次测试之前运行.

建立

  • 此方法在测试类中的每个测试之前运行.

根据我上面提到的理解,似乎setUpTestData位于setUpClass和setUp之间的区域.为什么我们需要setuUpTestData的类级方法,而两者中的一个setUpClasssetUp两者的组合可以实现相同的效果?

Mil*_*lan 21

编辑:Alasdair评论后的更新/更正

setUpClass

  • setUpClass用于执行类范围的初始化/配置(例如,创建连接,加载webdrivers).setUpClass例如,当使用打开数据库连接/会话时,您可以使用它tearDownClass来关闭它们.
  • setUpClass在运行任何测试之前,为TestCase调用一次.类似地tearDownClass在所有测试运行后调用.

文档说明:

SimpleTestCase及其子类(例如TestCase,...)依赖setUpClass()和tearDownClass()来执行某些类范围的初始化(例如覆盖设置).如果您需要覆盖这些方法,请不要忘记调用超级实现:

setUpTestData

  • setUpTestData用于为每个TestCase创建初始​​测试数据.TestCase.setUpClass()(src)调用此方法
  • setUpTestData文档中所述,对TestCase调用一次.如果数据库不支持事务,setUpTestData将在每次测试运行之前调用(感谢@Alasdair纠正我)

建立

  • setUp 将在每次测试运行之前调用,并且应该用于为每个测试运行准备测试数据集.

使用setUpTestData允许测试性能改进,请注意测试中对此数据的更改将在不同的测试运行之间保持不变.如果需要重新加载,可以通过setUp方法完成.如果用于运行测试的数据库不支持事务,则取消性能改进(setUpTestData在每次测试运行之前调用)

  • 那不太对劲.如果数据库支持事务,则只会调用[`setUpTestData`](https://docs.djangoproject.com/en/1.11/topics/testing/tools/#django.test.TestCase.setUpTestData)方法.如果数据库不支持事务,则仅在每次测试之前调用它. (2认同)