在运行NUnit并指定类别时,是否可以包括所有未分类的测试?

7
我们有几百个测试类,其中有几十个标记有以下属性: [TestFixture] [Explicit] [Category(“IntegrationTests”)] 因此,它们只会在我们的夜间自动化构建中运行。其余的TestFixtures没有指定类别(也没有标记为Explicit)。
这是我们正在运行以执行测试的NAnt任务:
<nunit2>
    <test>
        ...
        <categories>
            <include name="IntegrationTests" />
        </categories>
        ...
    </test>
</nunit2>

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

我希望能做到像这样:

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

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

(注意:我要求的是NAnt或NUnit命令行方案。我当然可以用不同的选项两次运行NUnit,或者在所有的TestFixtures上打Categories标签。这些都是可以使用的解决方法,但是直接指定未分类的测试用例会更加方便。)

2个回答

9

我也有同样的问题,直到我发现类别属性不仅可以应用于测试或测试夹具,还可以应用于整个程序集。

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

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


如果我理解正确的话,这不仅会运行“所有未分类的测试”,而且还会运行所有测试(来自具有程序集级别类别的程序集),包括其中任何具有显式类别的测试(我假设类别是可加的)? - bacar

0

不,考虑到您的情况,没有办法在单次运行NUnit中实现您想要的功能。如果您去掉了explicit属性,您可以通过排除所有不需要的分类测试来在单次运行中完成。

基本上,如果您转向使用分类,那么您的所有测试都应该被分类。


如果有一种方法可以确保所有测试都被分类,那么我会同意这个想法。 - bacar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接