如何让CruiseControl.NET/nant以.Test为后缀运行所有Unittest项目?

时间:2013-01-21 12:49:41

标签: nunit cruisecontrol.net nant nunit-console

在我们的持续集成设置中,我想设置CruisControl.NET来自动运行我们所有的单元测试。但是,我不想在配置中单独指定每个unittest dll。

所有单元测试项目都以.Test为后缀(并且所有非单元测试项目都不是)。如何配置CruiseControl.NET来运行这些项目的所有单元测试(我使用的是CruiseControl.NET的v1.5.7256.1)?

我当前的配置尝试:

<nunit>
    <path>$(nunit.path)</path>
    <assemblies>
        <assembly>$(working.dir)\**\*.Test.dll</assembly>
    </assemblies>
</nunit>

我发现很难找到关于这个特定nunit元素的文档。我能找到的大多数网页都会讨论使用execnunit2或其他nunit元素或nunit-console commandline options

我没有太多管理构建环境的经验,而且正在处理现有配置,其中每个程序集都是以下列方式单独指定的。

<nunit>
    <path>$(nunit.path)</path>
    <assemblies>
        <assembly>$(artifact.dir)\test1.dll</assembly>
        <assembly>$(artifact.dir)\test2.dll</assembly>
    </assemblies>
</nunit>

因此我尝试使用外卡失败了。

修改

这是我的配置文件的一些额外的xml,以显示上下文:

<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
    <project name="MyProject">
        <!-- whole bunch of other elements -->
        <tasks>
            <nunit>
                <!-- see above -->
            </nunit>
        </tasks>
    </project>
</cruiscontrol>

在Mightmuke的建议之后,我尝试用他的建议替换<nunit>元素,但得到以下例外:Unable to instantiate CruiseControl projects from configuration document. Configuration document is likely missing Xml nodes required for properly populating CruiseControl configuration. Unable to load array item 'property' - Cannot convert from type System.String to ThoughtWorks.CruiseControl.Core.ITask for object with value: ""

然后我尝试将<property><foreach>元素移到元素之外。然后我得到例外:Unused node detected: <property name="nunit.filelist" value="" />

我现在正在尝试了解有关<foreach>元素的更多信息以及我可以将其放在哪里,但不知怎的,我发现很难找到任何关于它的文档。

EDIT2:

我找到了我正在使用的nunit任务的文档:http://ccnet.sourceforge.net/CCNET/NUnit%20Task.html

我指定元素为String []类型。我不确定这意味着什么......但是从示例中可以看出它只是意味着它必须包含一个奇异形式的同名子元素列表。


PS:我意识到这个问题有点失控......当整个问题得到解决时,我会尝试以这种格式编辑它,以便以后可能对其他人有用。

1 个答案:

答案 0 :(得分:1)

如果您要使用nunit控制台,这是一个示例配置。

<property name="nunit.filelist" value="" />
<foreach item="File" property="testfile" verbose="true">
  <in>
    <items basedir=".">
      <include name="${working.dir}\**\*.Test.dll" />
    </items>
  </in>
  <do>
    <property name="nunit.filelist" value="${nunitfile.list + ' ' + testfile}" />
  </do>
</foreach>

<exec program="nunit-console-x86.exe" failonerror="true" verbose="true">
  <arg value="${nunit.filelist}" />
  <arg value="/xml=nunit-results.xml" />
  <arg value="/nologo" />
  <arg value="/nodots" />
</exec>

这尚未经过测试,并且可能有更好的方法来实现它,但它有望为您提供一个起点。