Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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_Unit Testing - Fatal编程技术网

Python Django测试用例测试命令

Python Django测试用例测试命令,python,django,unit-testing,Python,Django,Unit Testing,如果测试类中有几个方法,我发现执行顺序是按字母顺序的。但我想定制执行顺序。如何定义执行顺序 例如:testTestA将比TestB先加载 class Test(TestCase): def setUp(self): ... def testTestB(self): #test code def testTestA(self): #test code 据我所知,除了重命名测试之外,没有其他方法可以对测试进行排序。您能解释

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

例如:testTestA将比TestB先加载

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

    def testTestB(self):
        #test code

    def testTestA(self):
        #test code

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

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

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
,除非您明确调用它们,否则这些方法将无法运行。

要更新主题(来自文档):

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

  • 首先运行所有子类
  • 然后,所有其他基于Django的 测试(基于的测试用例,包括 )运行时不保证有特定的订购 也没有在他们中间强制执行
  • 还有其他的测试吗 (包括
    doctests
    )可以在不恢复数据库的情况下更改数据库 恢复到其原始状态,然后运行
注意:新的测试顺序可能会揭示对测试的意外依赖性 案例排序。依赖国家的博士就是这种情况 由给定的
TransactionTestCase
测试留在数据库中,它们必须 已更新为能够独立运行


例如,为了进行测试,请创建一个帐户以及帐户上的所有后续操作。这个方法的替代方案是什么?@ziang:想法是只测试一个操作。如果要测试帐户上的操作,请创建一个虚拟帐户,然后对其执行一次操作&检查。对每个要测试的操作执行此操作一次,这会为每个操作提供一个测试。我明白了。谢谢你的建议。我喜欢按逻辑顺序安排考试。这并不是说它们是相互依赖的,而是测试(我这里指的是测试方法)越相似,我就越想把它们放在一起。运行带有failfast选项(如Django)的测试时,如果没有按照您定义的顺序执行这些测试,那么很烦人,因为如果您在其中放置了一个pdb行,除非它是按字母顺序排列的第一个失败测试,否则它不会被触发。@sleske那么您愿意为每个测试复制一个代码以创建帐户吗?对我来说似乎一点都不正确,一旦我因为代码重构而不得不重构测试,最好在一个地方进行,而不是编辑2000个测试,对吗?+1:我自己不止一次地这样做,以将测试链接在一起,减少安装时间。