Как программно запустить модульные тесты с Gallio и MBUnit?
Я пытаюсь программно проверить, что мои модульные тесты проходят как часть моего процесса развертывания. Приложение использует MBunit и Gallio для своей среды модульного тестирования.
Вот мой код:
var setup = new Gallio.Runtime.RuntimeSetup();
setup.AddPluginDirectory(@"C:\Program Files\Gallio\bin");
using (TextWriter tw = new StreamWriter(logFilename))
{
var logger = new Gallio.Runtime.Logging.TextLogger(tw);
RuntimeBootstrap.Initialize(setup, logger);
TestLauncher launcher = new TestLauncher();
launcher.AddFilePattern(dllToRunFilename);
TestLauncherResult result = launcher.Run();
}
Вот тест, который содержится в DLL, которую я загружаю (я проверил, что это работает с тестовым прогоном Icarus):
public class Tests
{
[Test]
public void Pass()
{
Assert.IsTrue(true);
}
[Test]
public void Fail()
{
Assert.Fail();
}
}
Когда я запускаю приложение, я получаю следующие значения в results
Что неверно, так как тесты действительно есть! В файле журнала есть следующее
Отключенный плагин "Gallio.VisualStudio.Shell90": условие включения плагина не выполнено. Обратите внимание, что это предназначенное поведение для плагинов, которые должны быть размещены в сторонних приложениях для работы. Включите условие: '${process:DEVENV.EXE_V9.0} или ${process:VSTESTHOST.EXE_V9.0} или ${process:MSTEST.EXE_V9.0} или ${framework:NET35}'. Отключенный плагин "Gallio.VisualStudio.Tip90": плагин зависит от другого отключенного плагина: "Gallio.VisualStudio.Shell90".
Как мне решить эту проблему и найти результаты тестов?
2 ответа
Это работает для меня, обратите внимание, что я использовал этот nuget GallioBundle, чтобы получить gallio и mbunit, так что, возможно, есть какая-то разница с тем, что вы установили.
Ожидаются сообщения журнала, касающиеся плагинов, эти плагины не будут работать, если вы самостоятельно размещаете среду выполнения Gallio.
using System;
using System.IO;
using Gallio.Runner;
using Gallio.Runtime;
using Gallio.Runtime.Logging;
using MbUnit.Framework;
public static class Program
{
public static void Main()
{
using (TextWriter tw = new StreamWriter("RunTests.log"))
{
var logger = new TextLogger(tw);
RuntimeBootstrap.Initialize(new RuntimeSetup(), logger);
TestLauncher launcher = new TestLauncher();
launcher.AddFilePattern("RunTests.exe");
TestLauncherResult result = launcher.Run();
Console.WriteLine(result.ResultSummary);
}
}
}
public class Tests
{
[Test]
public void Pass()
{
Assert.IsTrue(true);
}
[Test]
public void Fail()
{
Assert.Fail();
}
}
Проверено так:
› notepad RunTests.cs
› nuget.exe install -excludeversion GallioBundle
Installing 'GallioBundle 3.4.14.0'.
Successfully installed 'GallioBundle 3.4.14.0'.
› cd .\GallioBundle\bin
› csc ..\..\RunTests.cs /r:Gallio.dll /r:MbUnit.dll
Microsoft (R) Visual C# Compiler version 12.0.21005.1
for C# 5
Copyright (C) Microsoft Corporation. All rights reserved.
› .\RunTests.exe
2 run, 1 passed, 1 failed, 0 inconclusive, 0 skipped
Это инструкция для запуска тестов MBUnit в Visual Studio 2012 и выше с использованием аккуратного трюка NUnit.
Во-первых, установите расширение NUnit Test Adapter (да, NUnit)
- Инструменты> Расширения и обновления> Онлайн> поиск NUnit > установить тестовый адаптер NUnit.
- Возможно, вам придется перезапустить Visual Studio IDE.
Затем вам просто нужно добавить новый атрибут теста NUnit в ваши методы тестирования. Смотрите пример кода здесь (обратите внимание на операторы использования вверху) ...
//C# example
using MbUnit.Framework;
using NuTest = NUnit.Framework.TestAttribute;
namespace MyTests
{
[TestFixture]
public class UnitTest1
{
[Test, NuTest]
public void myTest()
{
//this will pass
}
}
}
Вы можете запустить и отладить тест в Visual Studio, так как NUnit и Gallio Icarus GUI Test Runner будут запускать их как MBUnit (например, разрешить параллельный запуск). Вам нужно будет запретить Gallio запускать тесты NUnit, удалив папку NUnit в месте установки gallio, например C:\Program Files\Gallio\bin\NUnit