Использование xunit или nunit в качестве среды для выполнения тестов
Я начну с проблемы. У меня есть небольшая библиотека. Он просматривает список URL-адресов в текстовых файлах и создает утверждения в зависимости от того, возвращается ли URL-адрес 200 или нет.
Цель состоит в том, чтобы сделать тест-бегуна, такого как Reshaprer, Testdriven.net, или CI-сервером, например, Team City или Hudson, для того, чтобы принимать утверждения в качестве тестов.
У меня вопрос, как мне расширить / собрать на xunit или nunit для запуска тестов из другого источника? Примеры были бы отличными.
Обновление Чтобы сделать вещи немного более понятными. Я должен быть в состоянии посмотреть загрузку DLL в тестовом средстве, которое поставляется с xunit / nunit и запустить тест.
Как заполняется список URL-адресов, очень динамично. В зависимости от определенных вещей может быть создано больше URL. Таким образом, список данных не вариант.
3 ответа
С 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 и взгляните на примеры бегунов.
Если вы имеете в виду, как вы можете запускать тесты 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, '='));
}
}
}
}
}
Вы можете использовать TestCaseSourceAttribute
в NUnit для запуска динамических тестов.