是否有可能在python中使用不同的模式过滤测试文件和单个测试?

时间:2015-12-16 14:46:34

标签: python unit-testing nose

根据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之外,有没有办法运行匹配模式的所有测试

1 个答案:

答案 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)