我正在将 Python 项目的测试套件从 unittest 转换为 nose。该项目的现有框架(基于 unittest)相当笨重,包含大量用于测试发现和运行的高度定制的代码,因此我正在尝试迁移到鼻子以使一切更加精简。
但是,我遇到了生成测试套件的代码的问题。
该项目的框架有两种运行测试的方式。一个是
class TestSomething(unittest.TestCase):
def setUp(self):
...
def test_x(self):
...
def test_y(self):
...
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestSomething))
这是“直截了当”的方式,它是所有鼻子示例和教程所显示的,并且有效。但是,第二种方法是定义一个包含所有测试逻辑的测试类,然后在包含不同设置配置的各种子类中创建测试用例,并从超类继承测试:
class TestSomething(unittest.TestCase):
def test_x(self):
...
def test_y(self):
...
class TestCase1(TestSomething):
def setUp(self):
...
class TestCase2(TestSomething):
def setUp(self):
...
suite = unittest.TestSuite()
cases = [TestCase1,TestCase2]
suite.addTests([unittest.makeSuite(case) for case in cases])
这就是鼻子失败的原因。它首先尝试运行测试方法,这显然不起作用,因为超类中没有 setUp() 并且 test_x() 和 test_y() 中使用的许多变量尚未定义。
我在任何地方都没有找到任何这样的例子,而且 Nose 的(相当稀疏且难以导航)文档似乎也没有提到它。这怎么能和鼻子一起工作?任何帮助将不胜感激。