在python中可以用不同的模式过滤测试文件和单独的测试吗?

2024-10-02 02:38:07 发布

您现在位置:Python中文网/ 问答频道 /正文

根据nose documentation--match选项设置all测试发现的模式:

Files, directories, function names, and class names that match this regular expression are considered tests. Default: (?:\b|_)[Tt]est [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")

我可能想运行caledtestBeans的所有测试,但是除了函数之外,对所有东西都使用标准的测试发现模式。除了枚举所有测试,或者将某个grep表达式管道化到nosetests之外,是否有一种方法可以运行所有匹配模式的测试?在


Tags: 函数selfnamesdefmatch模式functionunittest
1条回答
网友
1楼 · 发布于 2024-10-02 02:38:07

Nose提供了一种通过定制Selector更改内置测试选择逻辑的方法:

在您的例子中,您只需要基于nose.selector.Selector创建自己的Selector类并重写wantMethod方法:

from nose.selector import Selector

class MySelector(Selector):
    def wantMethod(self, method):
        # custom logic here - returns True/False

仅供参考,built-in ^{}的所有want*方法都使用matches函数,该函数使用配置的 match值,默认情况下是(?:\b|_)[Tt]est。在

另请参见^{} is implemented in ^{}。在

准备好选择器之后,您应该通过制作一个插件将其注入到测试加载程序中:

^{pr2}$

相关问题 更多 >

    热门问题