将摊铺机和鼻子与非典型目录结构一起使用

时间:2009-04-06 20:08:06

标签: python nose paver

我正在尝试为Paver编写一个将在我的文件上运行nosetests的任务。

我的目录结构如下所示:

project/
   file1.py
   file2.py
   file3.py
   build/
      pavement.py
   subproject/
      file4.py
   test/
      file5.py
      file6.py

Doctests(使用--with_doctest选项)应该在所有* .py文件上运行,而只有project/test下的文件(在此示例中为file5.py和{{1}应该搜索测试例程。

我似乎无法弄清楚如何执行此操作 - 我可以为file6.py编写一个自定义插件,其中包含正确的文件,但我似乎无法构建nose并在调用paver任务之前安装它。我也找不到让nosetests在命令行上传递要测试到paver的文件列表的方法。

让这个工作的最佳方式是什么?

1 个答案:

答案 0 :(得分:2)

这完全接近你想要的东西吗?

from paver.easy import sh, path
__path__ = path(__file__).abspath().dirname()

@task
def setup_nose_plugin():
    # ... do your plugin setup here.

@task
@needs('setup_nose_plugin')
def nosetests():
    nose_options = '--with-doctest' # Put your command-line options in there
    sh('nosetests %s' % nose_options, 
       # Your pavement.py is in a weird place, so you need to specify the working dir:
       cwd=__path__.parent)

我实际上并不确定如何告诉鼻子查看特定文件,但这是命令行选项的问题。

--where允许你指定一个目录,但我没有办法说“在这里只运行doctests,在这里运行其他测试”。您可能需要两次sh('nosetests')的调用来完成所有这些操作。