NUnit无法运行测试套件

12
我在NUnit中创建了一个测试套件,该套件引用了各种程序集中的多个不同的单元测试夹具。我基本上使用了从NUnit文档中示例代码
namespace NUnit.Tests
{
    using System;
    using NUnit.Framework;
    using System.Collections;

    public class AllTests
    {
        [Suite]
        public static IEnumerable Suite
        {
            get
            {
                ArrayList suite = new ArrayList();
                suite.Add(new VisionMap.DotNet.Tests.ManagedInteropTest.DotNetUtilsTest());
                return suite;
            }
        }
    }
}
我的目标是将几个测试添加到上面的列表中,以便我可以批量运行它们。但是当我尝试在 NUnit 的 GUI 中加载 DLL 时,我得到了这个错误:alt text。我做错了什么?我知道文档说 GUI 无法运行测试套件,但我已经尝试了控制台。请问一下测试套件有什么作用,我该如何使用它们来达到我的目标?我正在使用 nunit 2.5.0.9122。
编辑: 好吧,没有答案出现。最后我找到了另一个解决方案:分类。通过给测试夹具分配适当的类别进行分组,然后我可以批量运行其中的一部分,同时忽略另一部分。仍然很奇怪,这个套件功能似乎完全失效了。

我已经添加了一份悬赏,希望有人能够向我解释Suites的作用或者如何在几个程序集中创建一批测试而不必从命令行运行所有测试。 - Assaf Lavie
真可惜赏金没有起到任何帮助......唯一发布的回答根本不能解答问题。 - Assaf Lavie
我总是使用类别来处理这种事情。它似乎得到了更广泛的支持。 - Mike Two
2个回答

3
你为什么要返回 "IEnumerable" 而不是 "TestSuite" 呢?
[Suite]
public static TestSuite Suite 

更新

在NUnit网站页面底部的小字中,看起来Suite类型的测试将不会显示在Gui运行器中,所以我想这就是问题所在 :)

当遇到套件时,它们目前不会在Gui中显示或自动运行。套件机制的历史目的是提供一种在每次运行的顶层聚合测试的方法。因此,只有在控制台或gui命令行上使用/fixture选项时才支持它们。

更新2

我不确定您尝试使用“Suite”功能实现什么目标,但如果您正在寻找一种配置一组测试程序集一起运行的方法,我过去使用了“NUnit Test Projects”(只是一个列出测试dll的xml配置文件)。这允许配置一组固定的测试程序集引用,然后加载到GUI或由控制台运行程序:

http://www.nunit.org/index.php?p=multiAssembly&r=2.5.5


这是文档上建议我应该做的:http://www.nunit.org/index.php?p=suite&r=2.4.7我认为这与将NUnit版本与测试本身分离有关。 - Assaf Lavie
a. 我没有使用/fixture选项,更重要的是 b. 我应该如何运行测试套件?我尝试了GUI和控制台,但都不起作用。 - Assaf Lavie
谢谢,我会尝试这样做。但是回答你的问题,是的,那就是我想要实现的,而且我认为套件就是用来实现这个目的的。如果不是,那它们是用来做什么的? - Assaf Lavie
嗯.. NUnit测试项目解决方案的问题在于我无法指定需要运行每个程序集中的哪些测试。这基本上是我想要套件的主要原因。 - Assaf Lavie
嗨,你解决了问题吗?我觉得我遇到了同样的问题。我必须使用suite属性来将我的测试与MSBuild集成。但是命令行不起作用。它显示"无法找到fixture xxx"。 - tguclu

3
套件在现今的使用中并不是必需品。如果你只是想用它们来指定哪些测试需要运行或不需要运行,那么最好使用类别属性来实现。这也是你最终采取的方法,并且听起来是解决你问题的最佳方案。
然而,为了方便其他人和未来的参考,你仍然可以在Nunit中使用套件。你需要从控制台运行它们,并且只能使用 /fixture 选项。例如,要运行上面指定的套件(假设你的类已编译到一个名为AllTests.dll的程序集中),你需要运行以下命令:
nunit-console /fixture:AllTests.Suite AllTests.dll

在GUI中,您看不到任何运行套件的证据或方法 - 文档中已经说明了这一点。但是,您可以使用类似上面的命令从内置于GUI中的控制台运行它们。


我在一些测试中使用套件,因为我有一些奇怪的用例需要我有时需要向我的测试方法传递参数。我通过创建下面这样的一个套件来实现这个目的。因此,它们确实有一些用途,只是在您的情况下不需要使用。

[Suite]
    public static IEnumerable MySuite
    {
        get
        {
            var suite = new ArrayList{new TestClass1(arg1), TestClass2(arg2)};
            return suite;
        }
    }

顺便说一句,如果有人知道比我做的更好的在运行时传递参数/控制测试行为的方法,请务必评论。我花了一些时间搜索了Nunit文档和邮件列表,这是我能想到的最好的方法! - imoatama

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