Nose不会使用load_tests发现单元测试



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. 我如何获得鼻子发现测试?WITHOUT实际上失去了使用python unittest运行测试的能力。我想使用NOSE作为python unittest的插件来获得clover和覆盖率报告
  2. 如何让它运行只匹配特定模式的测试?
抱歉这么晚才回来。我们基本上做了与控制台脚本相同的事情,只是我们将所有测试模块命名为integration_foo.py。无论如何,解决方案很简单,只需以编程方式运行nose。
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的方法。然而,这并不是运行nose所需要的全部内容,还需要获得某种解析器对象或将一组特定的argv传递给nose。

如果你想传递一组特定的argv让nose解析,只需执行

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

否则,你可以在命令行中指定特定于nose的参数,只要你不抛出任何东西,funky nose就不会出错。

在https://github.com/nose-devs/nose/tree/master/nose查看nose源代码,我在那里获得了编写

所需的所有信息。

最新更新