Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用xunit或nunit作为测试运行程序框架_.net_Nunit_Xunit - Fatal编程技术网

.net 使用xunit或nunit作为测试运行程序框架

.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是否返回200来创建断言

我们的目标是让一个测试运行者(如Regramer、Testdriven.net)或一个CI服务器(如TeamCity或hudson)将断言作为测试

我的问题是如何扩展/构建xunit或nunit以从另一个源运行测试? 举个例子就好了

更新 把事情弄清楚一点。 我应该能够在xunit/nunit附带的测试运行程序中查看加载dll并运行测试


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测试运行程序中运行测试。