我正在使用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()
谢谢!
答案 0 :(得分:0)
在我看来,source code of the unittest
模块似乎应该将“ runTest”方法准确地用于手动控制,直接执行测试,一种仅具有一个测试场景的测试用例的简单方法,或者在运行时定义的常规测试包装器。
另外,正如@Laurent LAPORTE在评论中指出的那样,它用作哨兵值,允许实例化TestCase
而不使用用于交互式解释器和调试的方法名称。
在使用测试发现时,如果类(this line)中还有其他测试,将被忽略。
由于在使用测试发现时遇到该错误,这意味着在某些测试或某些load_tests
包函数中的某个位置,将直接实例化一个测试用例类(例如TestPc()
)
runTest
函数用例的一个很好的例子是将测试函数包装在TestCase
中,该用例甚至在unittest
模块上实现为{{3 }}。