试图消除runTest方法要求

时间:2019-06-24 19:03:00

标签: python pytest

我正在使用Python编写大型代码库。代码的主要开发人员不再在公司工作。

代码具有一个自动化套件,而不是使用pytest autodiscovery来手动指定要在一系列TestClass.runTest(self)方法中运行的测试。

我想消除这些runTest方法并使用自动发现,因此我可以使用pytest-xdist插件并行化测试。

如果我只消除所有的runTest方法和似乎正在调用它们的东西,我会得到一堆:

_____________________________________________________________ ERROR at setup of TestRepo.test_checkin_checkout ______________________________________________________________
[gw5] linux2 -- Python 2.7.15 /usr/bin/python

self = <tests.repo_test.TestRepo testMethod=runTest>, args = ('test_checkin_checkout',), kwargs = {}

    def __init__(self, *args, **kwargs):
>       super(TestRepo, self).__init__()

repo_test.py:31: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
base/base_repo_test.py:15: in __init__
    super(BaseRepoTests, self).__init__(*args, **kwargs)
E   ValueError: no such test method in <class 'tests.repo_test.TestRepo'>: runTest

我还尝试了很多有关runTest方法(和methodName,似乎是TestFoo.__init__(self, methodName='runTest')的参数)的Google咨询,

为了理解何时需要runTest方法 ,我尝试将一些测试代码放在一起,以查看是否可以在runTest上将其放入 depend 方法,但是不起作用。该代码还是会自动发现的。

任何人都可以告诉我如何需要runTest方法吗?

这是无法依赖于runTest的小测试模块:

"""Unit test for tf module."""


import unittest

import tf


class TestPc(unittest.TestCase):
    """Unit tests for tf module."""

    def __init__(self, methodName='runTest'):
        """Initialize."""
        super(TestPc, self).__init__(methodName)

    def setUp(self):
        """Set up for tests - but not really."""
        super(TestPc, self).setUp()
        self.foo = 'bar'

    def test_add_1(self):
        """Test tf.add_1."""
        assert tf.add_1(2) == 3

    def test_add_2(self):
        """Test tf.add_2."""
        assert tf.add_2(5) == 7

    def test_mult_3(self):
        """Test tf.mult_3."""
        assert tf.mult_3(11) == 33

    def runTest(self):
        """Run the tests."""
        self.test_add_1()


if __name__ == '__main__':
    unittest.main()

谢谢!

1 个答案:

答案 0 :(得分:0)

在我看来,source code of the unittest模块似乎应该将“ runTest”方法准确地用于手动控制,直接执行测试,一种仅具有一个测试场景的测试用例的简单方法,或者在运行时定义的常规测试包装器。
另外,正如@Laurent LAPORTE在评论中指出的那样,它用作哨兵值,允许实例化TestCase而不使用用于交互式解释器和调试的方法名称。

在使用测试发现时,如果类(this line)中还有其他测试,将被忽略。

由于在使用测试发现时遇到该错误,这意味着在某些测试或某些load_tests包函数中的某个位置,将直接实例化一个测试用例类(例如TestPc()

runTest函数用例的一个很好的例子是将测试函数包装在TestCase中,该用例甚至在unittest模块上实现为{{3 }}。