6

ビルド時に xUnit テストを実行する C# プロジェクトをセットアップしようとしているので、継続的インテグレーションで使用できます。通常のプロジェクト、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' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。宣言が正しいこと、アセンブリとそのすべての依存関係が利用可能であること、および Microsoft.Build.Framework.ITask を実装するパブリック クラスがタスクに含まれていることを確認してください。

xunit.runner.msbuild.dll と xunit.runner.utility.dll を参照先のプロジェクトに追加しても、このメッセージが表示されます。しかし、変更せずに再度ビルドすると、一貫して次のようになります。

「xunit」タスクが見つかりませんでした。以下を確認してください: 1.) プロジェクト ファイル内のタスクの名前がタスク クラスの名前と同じである。2.) タスク クラスは "パブリック" であり、Microsoft.Build.Framework.ITask インターフェイスを実装します。3.) タスクは、プロジェクト ファイル、または "C:\Windows\Microsoft.NET\Framework\v4.0.30319" ディレクトリにある *.tasks ファイルで正しく宣言されています。

しかし、私はこれらすべてをチェックしました:

  1. xunit.runner.msbuild.dll のタスク クラスはXunit.Runner.MSBuild.xunit(および xunit はクラス名の小文字です)。
  2. task クラスは、ITask を実装する Task を継承します。
  3. なので、UsingTask に問題があるのか​​もしれませんが、それが何かはわかりません。

(問題は、xunit.runner.msbuild.dll が .NET 2.0 を対象としていて、VS 2010 を使用している可能性も考えましたが、テスト ランナー プロジェクトを .NET 2.0 で再作成しましたが、問題は解決しませんでした。)

誰でも助けることができますか?

4

3 に答える 3

2

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>
于 2011-03-02T12:05:31.307 に答える
0

Pex と Moles がインストールされている場合、まったく同じエラー メッセージが表示されます。それらをアンインストールした後、すべてが正常に機能します。

于 2011-09-27T20:20:40.113 に答える