7

我们有数百个测试类,其中有几十个标有以下属性:[TestFixture] [Explicit] [Category("IntegrationTests")] 所以它们只会在我们隔夜的自动化构建中运行。其余的 TestFixture 没有指定类别(也没有标记为显式)。

这是我们正在运行以执行测试的 NAnt 任务:

<nunit2>
    <test>
        ...
        <categories>
            <include name="IntegrationTests" />
        </categories>
        ...
    </test>
</nunit2>

当然,这不会执行任何未分类的测试。

我希望能够做这样的事情:

<nunit2>
    <test>
        ...
        <categories>
            <include name="*" />
            <include name="IntegrationTests" />
        </categories>
        ...
    </test>
</nunit2>

所有未分类的测试都将与集成测试一起运行。这可能吗?如果是这样,语法是什么?

(注意:我正在寻找如上所述的 NAnt 解决方案或 NUnit 命令行解决方案。我当然可以使用不同的选项运行 NUnit 两次,或者将类别放在我所有的 TestFixture 上。这些是我正在寻找的解决方法如果必须,可以使用,但是能够直接指定未分类的测试会更酷。)

4

2 回答 2

8

我在同一条船上,并且感到沮丧,直到我刚刚发现 Category 属性不仅可以应用于测试或测试夹具,还可以应用于整个程序集。

我有两个测试程序集,其中包含我在本地运行的测试,还有一个包含仅应在构建服务器上运行的测试。我在前两个项目的 AssemblyInfo.cs 中添加了这个属性:[assembly: NUnit.Framework.Category("Always")][Explicit, Category("PublicDatabase")]第三个测试项目使用您描述的类别属性。构建服务器调用 NUnit/include=Always,PublicDatabase并获得所需的结果:前两个程序集中的所有测试都运行,只有PublicDatabase第三个程序集中的测试运行。

当我在前两个项目上本地运行 NUnit 时,我只是在单个程序集上运行它,根本不需要指定类别。

于 2010-11-01T22:01:29.440 回答
0

不,鉴于您的情况,无法在一次 NUnit 运行中做您想做的事情。如果您取消了显式属性,则可以通过排除所有您不想要的分类测试在一次运行中完成。

基本上,如果您跳转到类别,您的所有测试都应该进行分类。

于 2010-10-20T21:34:43.653 回答