情况1
假设我有一个想重用的测试类,
test_doubled.py
:
import unittest
class BaseTestCase(unittest.TestCase):
def test_something(self):
self.assertTrue(True)
BaseTestCase
,继承自
unittest.TestCase
从命令行运行测试会按预期生成以下输出:
$ python -m unittest discover -p test_doubled.py -v
test_something (test_doubled.BaseTestCase) ... ok
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
情况2
现在假设我添加第二个模块,
test_doubled_2.py
,如下所示:
from test_doubled import BaseTestCase
class DerivedTestCase(BaseTestCase):
pass
它继承自
基本测试用例
,因此我希望它将具有相同的测试方法,并且该测试方法将得到执行。然而,当我运行它时,我得到以下输出:
$ python -m unittest discover -p test_doubled_2.py -v
test_something (test_doubled.BaseTestCase) ... ok
test_something (test_doubled_2.DerivedTestCase) ... ok
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
它似乎运行该方法两次,一次用于派生类,一次用于基类。这根本不是我所期望的。
情况3
我的怀疑是
基本测试用例
从…起
测试2。py公司
基本测试用例
类正在执行。这似乎可以通过运行两个测试模块得到证实:
$ python -m unittest discover -p test_doubled\*.py -v
test_something (test_doubled.BaseTestCase) ... ok
test_something (test_doubled.BaseTestCase) ... ok
test_something (test_doubled_2.DerivedTestCase) ... ok
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
运行两个模块执行相同的测试方法
三次
,而我希望它只执行两次。
更新
澄清一下
它本身应该是一个可用的测试,所以将其作为一个混合将不起作用。我只想防止它被额外执行。
以下是预期结果:
-
只运行
基本测试用例
在中测试
$python-m unittest discover-p test_加倍。py-v
test_something(test_加倍。BaseTestCase)。。。好啊
----------------------------------------------------------------------
在0.000秒内运行1次测试
好啊
-
只运行
DerivedTestCase
在里面
测试2。py公司
$ python -m unittest discover -p test_doubled_2.py -v
test_something (test_doubled_2.DerivedTestCase) ... ok
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
它应该只执行
衍生测试用例
和
不
这个
基本测试用例
.
-
同时运行:
$ python -m unittest discover -p test_doubled\*.py -v
test_something (test_doubled.BaseTestCase) ... ok
test_something (test_doubled_2.DerivedTestCase) ... ok
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
测试方法精确执行两次,每次一次
BaseTestcase
一次
衍生测试用例
.