MSBuild - пытается запустить тесты xUnit (.net)
Я пытаюсь настроить проект C#, который будет запускать тесты xUnit при сборке, чтобы я мог использовать их в непрерывной интеграции. У меня есть обычный проект, тестовый проект библиотеки классов, использующий xUnit, и мой проект для запуска тестов. Из всего, что я прочитал, похоже, что я должен быть в состоянии заставить это работать, делая это в проекте тестового бегуна:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Test"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
[auto-created project stuff]
<UsingTask AssemblyFile="xunit.runner.msbuild.dll"
TaskName="Xunit.Runner.MSBuild.xunit" />
<Target Name="Test">
<xunit Assembly="$(MSBuildProjectDirectory)\..\OnePageOneDb.Tests\bin\Debug\OnePageOneDb.Tests.dll" />
</Target>
</Project>
Когда я строю свое решение после изменения (обычно редактируя файл.csproj), я получаю это:
Не удалось загрузить задачу "Xunit.Runner.MSBuild.xunit" из сборки C:\Users[myusername]\Code\OnePageOneDb\OnePageOneDb.TestRunner\xunit.runner.msbuild.dll. Не удалось загрузить файл или сборку 'file:///C:\Users[myusername]\Code\OnePageOneDb\OnePageOneDb.TestRunner\xunit.runner.msbuild.dll' или одну из ее зависимостей. Система не может найти указанный файл. Убедитесь, что объявление правильное, что сборка и все ее зависимости доступны и что задача содержит открытый класс, реализующий Microsoft.Build.Framework.ITask.
Даже если я добавлю xunit.runner.msbuild.dll и xunit.runner.utility.dll в проект в той папке, к которой он относится, я получу это сообщение. Но если я строю снова без изменений, я последовательно получаю это:
Задача "xunit" не найдена. Проверьте следующее: 1.) Имя задачи в файле проекта совпадает с именем класса задачи. 2.) Класс задачи является "общедоступным" и реализует интерфейс Microsoft.Build.Framework.ITask. 3.) Задача правильно объявлена в файле проекта или в файлах *.tasks, расположенных в каталоге "C:\Windows\Microsoft.NET\Framework\v4.0.30319".
Но я проверил все эти вещи:
- Класс задачи в xunit.runner.msbuild.dll
Xunit.Runner.MSBuild.xunit
(и xunit в нижнем регистре в имени класса). - Класс задачи наследуется от Task, который реализует ITask.
- Так что, возможно, есть проблема в использовании задачи, но я не знаю, что это такое.
(Я также подумал, что проблема может заключаться в том, что xunit.runner.msbuild.dll нацелен на.NET 2.0, и я использую VS 2010, но я заново создал проект запуска тестов в.NET 2.0, и проблема не исчезла.)
Кто-нибудь может помочь?
3 ответа
Вам необходимо указать правильный путь к xunit.runner.msbuild.dll. Прежде всего, вы можете просто указать полный путь и проверить, что xunit работает так, как вы хотите. Но для реальной среды вы должны указать относительный путь к DLL.
<UsingTask AssemblyFile="$(MSBuildProjectDirectory)\..\..\lib\xunit\xunit.runner.msbuild.dll"
TaskName="Xunit.Runner.MSBuild.xunit" />
MSBuildProjectDirectory является зарезервированным свойством и содержит "абсолютный путь к каталогу, в котором находится файл проекта".
РЕДАКТИРОВАТЬ:
Попробуйте использовать цель с полным именем Xunit.Runner.MSBuild.xunit
<Target Name="Test">
<Xunit.Runner.MSBuild.xunit Assembly="$(MSBuildProjectDirectory)\..\OnePageOneDb.Tests\bin\Debug\OnePageOneDb.Tests.dll" />
</Target>
По умолчанию встраивание в конфигурацию "release" запускает запуск тестов xunit. Если вы пытаетесь отключить запуск тестов xunit в tfsbuild, передайте следующий параметр сборки. Это может быть полезно в новых кроссплатформенных сборках, где выполнение юнит-тестов - это отдельный шаг.
/p:RunXunitTests=false
Я получаю точно такое же сообщение об ошибке, если у меня установлены Pex и Moles. Все отлично работает после их удаления.