如何在`nosetests`命令中添加自定义鼻子插件

时间:2013-11-21 21:28:30

标签: python unit-testing testing nose nosetests

所以我在处理鼻子插件方面非常棒。

我一直在搜索很多,但有关鼻塞的文档似乎很少。 我阅读并尝试了以下链接中的内容,尝试编写一个简单的鼻子插件 并使用nosetests运行它,但没有成功:

  1. https://nose.readthedocs.org/en/latest/doc_tests/test_init_plugin/init_plugin.html
  2. https://nose.readthedocs.org/en/latest/plugins/writing.html
  3. 我不想编写自己的测试运行器或从任何其他脚本运行测试(通过run(argv=argv, suite=suite(), ...)), 就像他们在第一个链接中那样。

    我用这样的类写了一个文件myplugin.py

    import os
    from nose.plugins import Plugin
    
    class MyCustomPlugin(Plugin):
        name = 'myplugin'
    
        def options(self, parser, env=os.environ):
            parser.add_option('--custom-path', action='store',
                              dest='custom_path', default=None,
                              help='Specify path to widget config file')
    
        def configure(self, options, conf):
            if options.custom_path:
                self.make_some_configs(options.custom_path)
                self.enabled = True
    
        def make_some_configs(self, path):
            # do some stuff based on the given path
    
        def begin(self):
            print 'Maybe print some useful stuff...'
            # do some more stuff
    

    并添加了setup.py,如下所示:

    try:
        from setuptools import setup, find_packages
    except ImportError:
        import distribute_setup
        distribute_setup.use_setuptools()
        from setuptools import setup, find_packages
    
    setup(
        name='mypackage',
        ...
        install_requires=['nose==1.3.0'],
        py_modules=['myplugin'],
        entry_points={
          'nose.plugins.1.3.0': [
            'myplugin = myplugin:MyCustomPlugin'
          ]
        }
    )
    

    两个文件都在同一目录中。

    每次运行nosetests --custom-path [path]时,我都会:

    nosetests: error: no such option: --custom-path
    

    从上面提到的链接中,我认为只需注册和启用自定义插件即可。 但看起来,无论是我做错了什么,还是鼻子的文档已经过时了。

    有人可以指出我注册和启用插件的正确方法,我可以使用nosetests吗?

    非常感谢!! :)

1 个答案:

答案 0 :(得分:4)

您不希望nose entry_points中的setup.py版本。如文档所述,只需使用nose.plugins.0.10即可。入口点名称中的虚线版本不是插件API版本的nose版本。