根据nose documentation,--match
选项为所有测试发现设置模式:
与此匹配的文件,目录,函数名称和类名 正则表达式被认为是测试。默认值:(?:\ b | _)[Tt] \ test [NOSE_TESTMATCH]
我经常发现我更喜欢对文件,目录,函数名和类名使用单独的匹配,而不是一个必须匹配所有匹配的模式。例如,使用此测试套件:
import unittest
class CoolBeansTest(unittest.TestCase):
def testCool(self):
self.assertEqual(cool_function_takes_forever(), 7)
def testBeans(self):
inst = MyCoolBeansClass()
self.assertEqual(inst.getBeanz(), "CoolBeans")
class WarmBeansTest(unittest.TestCase):
def testWarm(self):
self.assertEqual(warm_function_takes_forever(), 21)
def testBeans(self):
inst = MyWarmBeansClass()
self.assertEqual(inst.getBeanz(), "WarmBeans")
我可能想要运行所有测试testBeans
,但是除了函数之外的所有内容都使用标准的测试发现模式。除了枚举所有测试,或将某些grep
表达式汇总到nosetests
之外,有没有办法运行匹配模式的所有测试?
答案 0 :(得分:1)
Nose提供了一种通过制作自定义Selector
来更改内置测试选择逻辑的方法:
在您的情况下,您只需要根据Selector
创建自己的nose.selector.Selector
课程并覆盖wantMethod
方法:
from nose.selector import Selector
class MySelector(Selector):
def wantMethod(self, method):
# custom logic here - returns True/False
仅供参考,built-in Selector
使用want*
函数的所有matches
方法都使用配置的--match
值,默认情况下为(?:\b|_)[Tt]est
。< / p>
另见wantMethod
is implemented in nose.selector.Selector
。
准备好选择器后,您应该通过制作插件将其注入测试加载器:
>>> from nose.plugins import Plugin
>>> class UseMySelector(Plugin):
... enabled = True
... def configure(self, options, conf):
... pass # always on
... def prepareTestLoader(self, loader):
... loader.selector = MySelector(loader.config)