nose没有使用load_tests发现单元测试

时间:2013-03-25 11:56:58

标签: python-2.7 nose

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. 如何让它运行仅匹配特定模式的测试?

1 个答案:

答案 0 :(得分:2)

抱歉这么晚才回来。除了我们命名所有测试模块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)

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

如果你想传递一组特定的argv来解析,只需要做

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

否则你可以在命令行指定鼻子特定的参数,只要你不扔任何时髦的鼻子就不应该出错。

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