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

时间:2017-04-24 17:37:41

标签: python django testing

setUpClass课程中setUpTestDatasetUpTestCase之间有什么区别?

更具体地说,每个用例的用例是什么?

到目前为止我所理解的是:

setUpClass

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

setUpTestData

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

设置

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

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

1 个答案:

答案 0 :(得分:15)

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

setUpClass

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

文档说明:

  

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

setUpTestData

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

设置

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

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