我可能在这里有一个XY problem,所以对于我的实际问题提供更好解决方案的答案,以及建议如何做我想做的愚蠢事情的答案都是受欢迎的。
X问题是,我有一个非常大的测试套件使用Python's unittest
module。让我们说几百个单独的test_<foo>.py
个文件。我知道如何使用unittest.discover()
发现它们。但是,这将它们放在一个大的测试套件中。我想要三个(或四个或五个)子集:例如frontend
测试套件和backend
测试套件。为简单起见,您可以假设子集是互斥的。
我不想在一个大的&#34;目录中手动列出所有frontend
个测试&#34 ;;我想继续使用discover()
(以便自动选择新添加的前端测试,并且#34;内容和#34;永远不会过时)。
所以我的想法是以某种方式使用装饰器。例如,我现有的测试用例模块
import unittest
class TestButtons(unittest.TestCase):
def test_simple(self):
self.assertTrue(True)
会变成
import unittest
import MySuites
@MySuites.FrontEndTest
class TestButtons(unittest.TestCase):
def test_simple(self):
self.assertTrue(True)
然后,在discover()
编辑所有测试用例的情况下,我可以通过检查类和#39;来将大套件过滤到我的小套件中。属性以适当的方式。
Y问题是,这个解决方案要求我import MySuites
进入我的数百个测试文件中的每一个。如果可能的话,我想避免这种差异。事实上,理想情况下我可以写
import unittest
@unittest.FrontEndTest
class TestButtons(unittest.TestCase):
def test_simple(self):
self.assertTrue(True)
使用某种猴子修补。但是,我再也不想在数百个文件中使用import
其他模块;我只想unittest
来做我想要的事情&#34;没有我必须告诉它数百次。
这可能吗?本地Python演讲者如何解决我的问题?
答案 0 :(得分:1)
我将unittest.TestCase子类化,然后让我的测试代码导入带有子类的模块。
# module: quuxunittest.py
import unittest
class FrontEndCase(unittest.TestCase):
pass
class BackEndCase(unittest.TestCase):
pass
然后你就可以像往常一样编写测试,并依靠测试发现来忽略它不应该运行的测试。
import quuxunittest
class TestButtons(quuxunittest.FrontEndCase):
def test_simple(self):
self.assertTrue(True)
然后,您希望将unittest发现代码子类化以利用此功能。