【问题标题】:Django TestCase testing orderDjango TestCase 测试顺序
【发布时间】:2011-02-04 13:52:13
【问题描述】:

如果测试类中有几个方法,我发现执行的顺序是按字母顺序的。但我想自定义执行顺序。如何定义执行顺序?

例如:testTestA 将比 testTestB 先加载。

class Test(TestCase):
    def setUp(self):
        ...

    def testTestB(self):
        #test code

    def testTestA(self):
        #test code

【问题讨论】:

    标签: python django unit-testing


    【解决方案1】:

    单元测试的一个原则是每个测试都应该独立于所有其他测试。 如果在您的情况下 testTestA 中的代码必须在 testTestB 之前,那么您可以 将两者合并为一个测试:

    def testTestA_and_TestB(self):
        # test code from testTestA
        ...
        # test code from testTestB
    

    或者,也许会更好

    def TestA(self):
        # test code
    def TestB(self):
        # test code
    def test_A_then_B(self):
        self.TestA()
        self.TestB()
    

    Test 类只测试那些名称以小写 test... 开头的方法。 因此,您可以添加额外的辅助方法 TestA 和 TestB,除非您明确调用它们,否则它们不会运行。

    【讨论】:

    • +1:我自己不止一次这样做,将测试链接在一起,减少了设置时间。
    【解决方案2】:

    据我所知,除了重命名测试之外,没有其他方法可以对测试进行排序。您能解释一下为什么需要按特定顺序运行测试用例吗?在单元测试中,它通常被认为是不好的做法,因为这意味着您的案例不是独立的。

    【讨论】:

    • 类似,用于测试创建一个账户和账户上的所有后续操作。这种方法的替代方法是什么?
    • @ziang:这个想法是你只测试一个操作。如果要测试帐户的操作,请创建一个虚拟帐户,然后对其执行一次操作并检查。为每个要测试的操作执行一次此操作,即为每个操作提供一个测试。
    • 我明白了。谢谢你的建议。
    • 我喜欢按逻辑排序测试。并不是说它们是依赖的,而是测试(我这里指的测试方法)越相似,我就越想把它们放在一起。使用未按您定义的顺序执行的 failfast 选项(与 Django 一样)运行测试很烦人,以防万一您在其中放置了 pdb 行,除非它是按字母顺序排列的第一个失败测试,​​否则它不会被触发。
    • @sleske,所以您提议为每个测试复制代码以创建帐户?对我来说似乎完全不对,一旦由于代码重构而不得不重构测试,最好在一个地方进行而不是编辑 2000 个测试,对吗?
    【解决方案3】:

    更新主题(来自文档):

    Order in which tests are executed

    为了保证所有 TestCase 代码以干净的开头 数据库中,Django 测试运行程序按以下方式重新排序测试:

    • 首先运行所有TestCase 子类。
    • 然后,所有其他基于 Django 的 测试(基于SimpleTestCase的测试用例,包括 TransactionTestCase) 在不保证特定顺序的情况下运行 也没有在其中强制执行。
    • 然后任何其他unittest.TestCase 测试 (包括doctests)可能会更改数据库而不恢复它 运行到其原始状态。

    注意:新的测试顺序可能会揭示对测试的意外依赖 案例订购。依赖于状态的文档测试就是这种情况 由给定的TransactionTestCase 测试留在数据库中,它们必须是 更新为能够独立运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      • 2014-10-15
      • 1970-01-01
      相关资源
      最近更新 更多