【问题标题】:nose does not discover unit tests using load_tests鼻子没有发现使用 load_tests 的单元测试
【发布时间】:2013-03-25 11:56:58
【问题描述】:

Python 2.7.1 鼻子 1.1.2

我已阅读有关此问题的相关问题,但它们无济于事。我有如下所示的测试用例

例如my_tests.py

def load_tests(loader, tests, pattern):
    return unittest.TestSuite(MyTest() for scenario_name in list)

我有几个带有 load_tests 方法的此类模块,我使用 unittest 运行它们,如下所示

test_loader = unittest.defaultTestLoader.discover( '.', my_pattern_var); 
test_runner = unittest.TextTestRunner();
result = test_runner.run(test_loader)
sys.exit(not result.wasSuccessful())

如果我用等效的鼻子代码 nose.main() 替换它,它会找到 0 个测试。

问题

  1. 如何通过鼻子发现测试? 没有实际上失去了使用 python unittest 运行我的测试的能力。我想使用 NOSE 作为 python unittest 的插件来获取三叶草和覆盖率报告
  2. 如何让它运行仅匹配特定模式的测试?

【问题讨论】:

  • 这个问题现在对你还有意义吗?
  • 请。我希望 NOSE 能够找到使用 load_tests 方法创建的测试。

标签: python-2.7 nose


【解决方案1】:

抱歉这么晚才回来。除了我们将所有测试模块命名为 integration_foo.py 之外,我们基本上做了与您在此处尝试为控制台脚本做的相同的事情。无论如何,解决方案很简单,只需以编程方式运行即可。

import re
from nose.config import Config

TEST_REGEX = '(?:^|[\\b_\\./-])[Ll]oad'

# Change the test match pattern
nose_config = Config()
nose_config.testMatch = re.compile(TEST_REGEX)

# Specify the use of a Plugin Manager, load plugins
nose_config.plugins = BuiltinPluginManager()
nose_config.plugins.loadPlugins()

run(config=nose_config)

所以这个基本选项将鼻子正在寻找的正则表达式模式从所有标记为测试的方法更改为所有标记为负载的方法。然而,这并不是你完全运行鼻子所需要的,还需要获取某种解析器对象或将一组特定的 argv 传递给鼻子。

如果你想传递一组特定的 argv 以由鼻子解析,只需这样做

run(config=nose_config, argv=["foo", "bar"])

否则,您可能可以在命令行中指定特定于鼻子的参数,只要您不输入任何时髦的鼻子就不会出错。

查看 https://github.com/nose-devs/nose/tree/master/nose 的鼻子源代码,我在这里获得了编写此代码所需的所有信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 2010-10-27
    • 2018-11-24
    • 1970-01-01
    • 2011-07-21
    • 2012-10-03
    相关资源
    最近更新 更多