我有什么我只能考虑一个非常奇怪的问题,nosetests识别有效测试类的类。
我通过使用以下方法将测试类初始化为具有来自基础测试类的特定继承的通用type
:
def random_test_class(n):
print "Generating %d random test cases..." % n
def make_test(genre, ss, ps):
return lambda self: self.compose(genre, ss, ps)
return type('TestEverything', (TestBase,),
{ 'test_%d' % i: make_test(genre, ss, ps)
for (i, (genre, ss, ps)) in zip(xrange(n), generate_settings())
})
然后用
初始化课程class TestEverything(random_test_class(100)):
pass
现在,当我用python -m unittest discover
调用我的标准测试框架时,测试非常高兴,它将TestEverything
类视为定义100个测试方法的测试类(test_1
, test_2
等等......)但是,如果我使用nosetests ./ -m "test_*"
,则拒绝将TestEverything
视为有效的测试类,并且不会运行任何测试方法。
我该如何解决这个问题?我真的需要xunit
提供的nosetests
输出框架,但我非常希望避免使用正确初始化具有特定测试元类的类所需的所有元类faff。
答案 0 :(得分:1)
在决定是否在测试中包含方法时,Nose会检查实现该方法的函数的名称而不是属性名称。更改您make_test
,以便创建的测试具有Nose将选择的名称。
def make_test(genre, ss, ps):
def test(self):
self.compose(genre, ss, ps)
return test
这将匹配您在问题中提供的正则表达式。 test_*
匹配其中包含test
的任何名称,后跟任意数量的下划线。
请注意,如果您希望函数具有不同的名称,则可以将索引传递给make_test
并设置test.__name__
:
def make_test(i, genre, ss, ps):
def test(self):
self.compose(genre, ss, ps)
test.__name__ = 'test_%d' % i
return test