gpt4 book ai didi

python - 如何在nosetests中使用正则表达式(即-m)在夹具中选择一些测试方法?

转载 作者:行者123 更新时间:2023-12-01 04:26:48 25 4
gpt4 key购买 nike

下面是我的问题的简化说明:

import sys
import nose


def test_equality_stdalone():
assert "b" == "b"


def test_inequality_stdalone():
assert "b" != "c"


def test_xxx_stdalone():
assert "xxx" == "xxx"


class TestClass(object):
def setUp(self):
pass

def tearDown(self):
pass

def test_equality(self):
assert "a" == "a"

def test_xxx(self):
assert "xxx" == "xxx"


if __name__ == "__main__":
nose.main(argv=sys.argv[:] + ["-v", "-m", ".*equality.*", __file__])

此测试脚本执行后会产生 -

zzztest.test_equality_stdalone ... ok
zzztest.test_inequality_stdalone ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.003s

OK

虽然这 -

nose.main(argv=sys.argv[:] + ["-v", "-m", ".*Class.*", __file__])

产量 -

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

还有这个 -

nose.main(argv=sys.argv[:] + ["-v", "-m", "", __file__])

产量 -

zzztest.TestClass.test_equality ... ok
zzztest.TestClass.test_xxx ... ok
zzztest.test_equality_stdalone ... ok
zzztest.test_inequality_stdalone ... ok
zzztest.test_xxx_stdalone ... ok

----------------------------------------------------------------------
Ran 5 tests in 0.004s

OK

有人可以帮我弄清楚如何从 TestClass 中仅选择一些方法进行测试吗?

附注-根据文档(如下) nose.main(argv=sys.argv[:] + ["-v", "-m", ".*Class.*", __file__]) 应该有至少进行了一些测试。

  -m REGEX, --match=REGEX, --testmatch=REGEX
Files, directories, function names, and class names
that match this regular expression are considered
tests. Default: (?:^|[\b_\.\-])[Tt]est
[NOSE_TESTMATCH]

P.P.S。 -不是 nose framework command line regex pattern matching doesnt work(-e,-m ,-i) 的重复项。如果您阅读问题并看到我传递给nose.main()的3个不同输入,那么您会发现问题不是“-m”过滤器根本不起作用,而是它仅适用于独立测试情况,同时总是忽略 TestClass 中的方法。

最佳答案

了解 Nose 如何匹配它想要的测试非常重要。对于类名、函数名和目录来说,它是独立发生的。查看 selector.py 来解开这个谜团,但简短的故事是:您的正则表达式查询必须与类名称(在您的情况下为 TestClass)和类方法匹配(test_equalitytest_xxx)同时进行。因此,如果您想运行 TestClass.test_xxx,您可以使用以下内容:

nosetests zzztest.py -v --match="(TestClass|test_xxx$)"
zzztest.TestClass.test_xxx ... ok

----------------------------------------------------------------------
Ran 1 test in 0.002s

OK

如果该类作为正则表达式的一部分不匹配,则它的方法不会被视为测试,也不会根据正则表达式进行评估,因此您将获得 0 个测试。

这里唯一的区别是美元符号匹配类测试方法,但无法匹配独立方法。如果您有名称相同的独立方法和类方法,您将无法使用 --match 正则表达式过滤器区分这两者。

关于python - 如何在nosetests中使用正则表达式(即-m)在夹具中选择一些测试方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32992608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com