我的测试框架目前基于一个test-runner实用程序,它本身是从Eclipse pydev python test-runner派生而来的。我改用Nose,它有我的自定义测试跑步器的许多功能,但似乎是更高质量的代码。
我的测试套件包括许多以前从未运行过的抽象测试类。标准的python testrunner (和我的定制的)只运行unittest.TestCase和unittest.TestSuite的实例。
我注意到,自从我切换到Nose后,它几乎可以运行任何以"test“开头的东西,这很烦人……因为我们用于测试混合的命名约定看起来也像是一个测试类。以前,这些不会作为测试运行,因为它们不是TestCase或TestSuite的实例。
显然,我可以重新命名这些方法,以便从它们的名称中排除"test“这个词……这将需要一段时间,因为测试框架非常大,并且有很多继承。另一方面,如果有一种方法可以让鼻子只看到TestCases和TestSuites是可运行的,那就太好了……没别的了。
这可以做到吗?
发布于 2010-06-25 21:57:26
您可以尝试使用nosetests的-m选项。来自文档:
测试类是在与testMatch匹配的测试模块中定义的类,或者是unittest.TestCase的子类
-m设置该测试,这样您就可以禁用以testMatch开头的任何测试。
另一件事是,您可以将__test__ = False添加到您的测试用例类声明中,以将其标记为“不是测试”。
发布于 2015-04-23 09:06:42
如果你想要一个真正抽象的测试类,你可以从object继承抽象类,然后在测试用例中继承。
例如:
class AbstractTestcases(object):
def test_my_function_does_something(self):
self.assertEquals("bar", self.func())然后将其与以下内容一起使用:
class TestMyFooFunc(AbstractTestcases, unittest.TestCase):
def setUp(self):
self.func = lambda: "foo"然后,nosetests将只提取TestMyFooFunc中的测试用例,而不提取AbstractTestCases中的测试用例。
发布于 2012-11-30 10:36:19
您可以使用unittest.TestCase的--attr参数来指定该属性所拥有的属性。例如,我使用:
nosetests --attr="assertAlmostEqual"您可以通过使用and和or匹配来更加小心:
nosetests -A "assertAlmostEqual or addTest"有关方法/属性和Nose的description of the capabilities of the --attr plugin的完整列表,请参阅unittest's documentation。
https://stackoverflow.com/questions/3110967
复制相似问题