0

上下文:一个目录,递归包含python unittest.TestCase

projectdir/build.xml
projectdir/src/x.java
projectdir/distribute/p.jar
projectdir/tests/a/test1.py
projectdir/tests/a/test2.py
projectdir/tests/b/test1.py
projectdir/tests/c/test1.py
projectdir/tests/javaunittests/test2.java

我想让蚂蚁打电话

python -m unittest discover -s a b c

现在我试图将 a 转换为fileset包含dirset目录的?这个想法是运行 python 单元测试:

<apply command="python">
   <arg line="-m unittest"/>
   <arg value="-s"/>
   <dirset include="${python_unittests}"/>
</apply>

其中${python_unittests}" would refer to a文件集`(但我不知道如何)是这样的:

<fileset id="python_unittests" include="**/*.py">
    <containsregexp expression="\(unittest.TestCase\)"/>
</fileset>

还是我错了,有没有更好的方法来实现这一点?

4

1 回答 1

1

你想要所有带有测试用例的 python 文件,你不需要 dirset,使用:

<apply executable="python">
  <arg line="-m unittest"/>
  <arg value="-s"/>
  <fileset dir="projectdir" includes="**/*.py">
    <contains text="unittest.TestCase"/>
  </fileset>
</apply>

编辑

在您发表评论后,刚刚检查了python.org 上的 unittest 文档。
据我了解,这应该足够了:

<property name="projectroot" location="foo/bar/yourprojectdir"/>
<exec executable="python" failonerror="true">
 <arg line="-m unittest discover ${projectroot} 'test*.py'"/>
</exec>

作为 python 文档第 26.3.3 节。测试发现解释:

The -s, -p, and -t options can be passed in as positional arguments in that order. The following two command lines are equivalent:

    python -m unittest discover -s project_directory -p '*_test.py'<br>
    python -m unittest discover project_directory '*_test.py'

我希望发现从 project_directory 开始递归地工作。

于 2013-01-25T20:56:05.733 回答