2011-06-11 82 views
1

我會從一個問題開始。我有一個小圖書館。它通過文本文件中的URL列表並創建斷言,具體取決於url返回200還是不。使用xunit或者nunit作爲測試運行器框架

目標是讓像Reshaprer,Testdriven.net或像團隊城市或哈德森這樣的CI服務器的測試運行者選取斷言作爲測試。

我的問題是我如何擴展/建立在xunit或nunit上運行其他來源的測試? 例子會很棒。

更新 使事情更清楚一點。 我應該能夠在xunit/nunit附帶的測試運行器中加載dll並運行測試。

如何填充URL列表是非常動態的。根據某些事情可以創建更多的網址。所以數據列表不是一個選項。

回答

1

如果你的意思是你如何可以運行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, '=')); 
       } 
      } 
     } 
    } 
} 
+0

不是我真正想要的。我不需要建立一個測試跑步者。我需要在nunits測試跑步者上跑測試。 – 2011-06-12 06:19:34

1

用的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的源代碼,並看看樣品亞軍。

+0

不是我在找的東西。 – 2011-07-08 22:00:42

+1

這是爲什麼?如果真的如此,你是如何解決這個問題的? – 2011-07-09 07:29:44