.net 使用xunit或nunit作为测试运行程序框架
我将从一个问题开始。我有一个小图书馆。它遍历文本文件中的url列表,并根据url是否返回200来创建断言 我们的目标是让一个测试运行者(如Regramer、Testdriven.net)或一个CI服务器(如TeamCity或hudson)将断言作为测试 我的问题是如何扩展/构建xunit或nunit以从另一个源运行测试? 举个例子就好了 更新 把事情弄清楚一点。 我应该能够在xunit/nunit附带的测试运行程序中查看加载dll并运行测试.net 使用xunit或nunit作为测试运行程序框架,.net,nunit,xunit,.net,Nunit,Xunit,我将从一个问题开始。我有一个小图书馆。它遍历文本文件中的url列表,并根据url是否返回200来创建断言 我们的目标是让一个测试运行者(如Regramer、Testdriven.net)或一个CI服务器(如TeamCity或hudson)将断言作为测试 我的问题是如何扩展/构建xunit或nunit以从另一个源运行测试? 举个例子就好了 更新 把事情弄清楚一点。 我应该能够在xunit/nunit附带的测试运行程序中查看加载dll并运行测试 URL列表的填充方式非常动态。根据某些情况,可以创建更
URL列表的填充方式非常动态。根据某些情况,可以创建更多的url。因此,数据列表不是一个选项。如果您的意思是如何以编程方式运行NUnit测试(而不是使用提供的NUnit运行程序),那么它实际上非常简单:
using System;
using NUnit.Core;
using NUnit.Framework;
using MyProject.Tests; /* assuming MyTestFixture is defined in this project/assembly */
namespace TestRunner.DemoApp {
class Program {
static void Main(string[] args) {
var builder = new TestSuiteBuilder();
var testAssemblyLocation = typeof(MyTestFixture).Assembly.Location;
var package = new TestPackage(testAssemblyLocation);
var suite = builder.Build(package);
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Running tests from " + testAssemblyLocation;
Console.WriteLine("Testing against " + ConfigurationManager.AppSettings["HostNameSuffix"]);
var result = suite.Run(new NullListener(), TestFilter.Empty);
switch (result.ResultState) {
case ResultState.Success:
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Pass.");
break;
case ResultState.Error:
case ResultState.Failure:
Console.ForegroundColor = ConsoleColor.Red;
DrawResults(result.Results, r => r.ResultState == ResultState.Error || r.ResultState == ResultState.Failure);
break;
}
static void DrawResults(IList results, Func<TestResult, bool> include) {
foreach (var obj in results) {
var result = obj as TestResult;
if (result == null) continue;
if (result.Results != null && result.Results.Count > 0) {
DrawResults(result.Results, include);
} else if (include(result)) {
Console.WriteLine(result.Name);
Console.WriteLine(result.Message);
Console.WriteLine(result.ResultState);
Console.WriteLine(result.StackTrace);
Console.WriteLine(String.Empty.PadLeft(Console.WindowWidth, '='));
}
}
}
}
}
使用系统;
使用NUnit.Core;
使用NUnit.Framework;
使用MyProject.Tests;/*假设在此项目/程序集中定义了MyTestFixture*/
命名空间TestRunner.DemoApp{
班级计划{
静态void Main(字符串[]参数){
var builder=newtestsuitebuilder();
var testAssemblyLocation=类型(MyTestFixture).Assembly.Location;
var包=新的测试包(testAssemblyLocation);
var suite=builder.Build(包);
Console.ForegroundColor=ConsoleColor.White;
Console.WriteLine(“从”+testAssemblyLocation运行测试;
Console.WriteLine(“针对”+ConfigurationManager.AppSettings[“HostNameSuffix]”进行测试);
var result=suite.Run(新的NullListener(),TestFilter.Empty);
开关(result.ResultState){
案例结果状态。成功:
Console.ForegroundColor=ConsoleColor.Green;
控制台。写线(“通过”);
打破
案例结果状态。错误:
案例结果状态。失败:
Console.ForegroundColor=ConsoleColor.Red;
DrawResults(result.Results,r=>r.ResultState==ResultState.Error | | r.ResultState==ResultState.Failure);
打破
}
静态void DrawResults(IList结果,Func include){
foreach(结果中的var obj){
var结果=obj作为测试结果;
如果(结果==null)继续;
如果(result.Results!=null&&result.Results.Count>0){
DrawResults(result.Results,include);
}其他如果(包括(结果)){
Console.WriteLine(result.Name);
Console.WriteLine(result.Message);
Console.WriteLine(result.ResultState);
Console.WriteLine(result.StackTrace);
Console.WriteLine(String.Empty.PadLeft(Console.WindowWidth,'=');
}
}
}
}
}
您可以使用in-NUnit运行动态测试。使用xUnit,您只需实现ITestRunner
接口,即:
public class MyTestRunner : ITestRunner
{
// Methods
public MyTestRunner();
public static TestRunState RunAssembly(TestRunner runner);
public static TestRunState RunClass(TestRunner runner, Type type);
public static TestRunState RunClassWithInnerTypes(TestRunner runner, Type type);
public static TestRunState RunMethod(TestRunner runner, MethodInfo method);
TestRunState ITestRunner.RunAssembly(ITestListener listener, Assembly assembly);
TestRunState ITestRunner.RunMember(ITestListener listener, Assembly assembly, MemberInfo member);
TestRunState ITestRunner.RunNamespace(ITestListener listener, Assembly assembly, string ns);
}
有关实现的详细信息,请获取xUnit的源代码并查看示例运行程序。这不是我想要的。我不需要构建测试运行程序。我需要在nunits测试运行程序中运行测试。