我在NUnit中创建了一个测试套件,它引用了各种组件中的几个不同的单元测试夹具。
我几乎使用了来自NUnit's docs的示例代码:
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时,我得到了这个:
我做错了什么?
我知道文档说GUI不会运行套件,但我也试过了控制台。有人可以告诉我套房有什么用处以及如何使用它们来实现我的目标吗?
我正在使用nunit 2.5.0.9122。
修改
嗯,没有答案。我最终找到了另一种解决方案:分类。我通过给出适当的类别对测试夹具进行分组,然后我可以批量运行它们的子集,同时仍然忽略另一个子集。
但是,很奇怪这个套件功能似乎完全被打破了。
答案 0 :(得分:3)
你有没有理由退回“IEnumerable”而不是“TestSuite”?
[Suite]
public static TestSuite Suite
<强>更新强>
在NUnit网站上阅读页面底部的小字,看起来套件类型测试不会显示在Gui跑步者中,所以我猜这就是问题:)
套件目前不会显示在Gui中,也不会遇到任何一个跑步者自动运行。 Suite机制的历史目的是提供一种在每次运行的顶层聚合测试的方法。因此,只有在控制台或gui命令行上使用/ fixture选项时才支持它们。
更新2
我不确定您使用“套件”功能尝试实现的目标,但如果您正在尝试找到一种配置一组测试程序集的方法,那么我使用了“ NUnit测试项目“过去这样做(它只是一个列出测试dll的xml配置文件)。这允许配置一组固定的测试程序集引用,然后将其加载到GUI中或由控制台运行程序运行:
答案 1 :(得分:3)
套房在这些日子里根本不需要任何东西。如果您只想使用它们来指定哪些测试执行和不运行,则使用Category属性可以更好地实现。这就是你最终做的事情,听起来像是你问题的最佳解决方案。
但是,对于其他人和将来的参考,您可以仍在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;
}
}