私は現在、クラスの Windows ストア アプリケーション (Windows 8) に取り組んでおり、NUnit テストを実行するのに問題があります。
私のソリューション/プロジェクトのセットアップは次のようになります。
TheMetroApp.sln
- SQLite-net.csproj - クラス ライブラリ (Windows ストア アプリ)。ファイルは NuGet から取得されます。
- DataModel.csproj - クラス ライブラリ (Windows ストア アプリ)
- UnitTests.csproj - 単体テスト ライブラリ (Windows ストア アプリ)。NUnit フレームワークは NuGet から取得されます。
- TheMetroApp.csproj - Windows SDK の例の 1 つから抽出されたプロジェクト ファイル。
その他 依存関係とユーティリティ
- Windows 8 Pro RTM/Visual Studio 2012 RTM
- リシャーパー7
- NUnit 2.6.1
- SQLite (こちらの手順に従ってセットアップ)
UnitTests は DataModel に依存し、参照しています。DataModel は SQLite-net に依存し、参照しています。私が UnitTests プロジェクトに追加した唯一のものは、いくつかのスタブ NUnit 単体テストを含む単一のクラスです。私が知る限り、これらは正しく設定されています。
[TestFixture]
public class TaskSourceTests
{
#region Private Class Members
private ITaskSource _taskSource;
private String _dbPath;
#endregion
#region Testing Infrastructure
[SetUp]
public void SetUp()
{
// This part makes NUnit/ReSharper have problems.
_dbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "UnitTestDatabase.sqlite");
}
#endregion
#region Misc. CRUD stuff
[Test]
public void CreateTaskTest()
{
// Save the task.
Task task = new Task( "Some Task", "lol.", DateTime.Now, false );
_taskSource.Save( task );
// Confirm that it is in the task db.
using( SQLiteConnection db = new SQLiteConnection( _dbPath ) )
{
const String query = "SELECT * FROM Task WHERE Id = ?";
IList<Task> results = db.Query<Task>( query, task.Id );
Assert.True( results.Contains( task ) );
}
}
// ...and so on [but with stubs that are basically Assert.Fail( "" )].
#endregion
}
TheMetroApp は Windows 8 SDK サンプル プロジェクトの 1 つですが、いくつかのカスタム XAML フォームが挿入されています。このプロジェクトで問題はありません。
私の問題は、使用しようとした単体テスト ランナーがどれも機能していないことです。
公式の NUnit x86 テスト ランナー (バージョン 2.6.1) を使用しようとすると、証明書関連の問題が原因でテストが失敗します(こちらを参照)。
UnitTests.TaskSourceTests.CreateTaskTest:
SetUp : System.InvalidOperationException : The process has no package identity. (Exception from HRESULT: 0x80073D54)
ReSharper の NUnit テスト ランナーは、まったく同じ理由で失敗します。残念ながら、現時点では回避策はないようです。
また、Visual Studio 2012 に組み込まれているテスト ランナーを使用してみました ( NUnit Visual Studio Test Adapterを使用)。「すべて実行」を使用してテストを実行しようとすると、次の出力が得られます。
------ Run test started ------
Updating the layout...
Checking whether required frameworks are installed...
Registering the application to run from layout...
Deployment complete. Full package name: "GibberishAndStuff"
No test is available in C:\Projects\project-name\ProjectName\UnitTests\bin\Debug\UnitTests.dll. Make sure that installed test discoverers & executors, platform & framework version settings are appropriate and try again.
========== Run test finished: 0 run (0:00:09.4873768) ==========
私が気付いた奇妙な点は、テスト エクスプローラーで特定のテストを選択して実行するように指示すると、わずかに異なるエラー メッセージが表示されることです。
Could not find test executor with URI 'executor://nunittestexecutor/'. Make sure that the test executor is installed and supports .net runtime version 4.0.30319.18010.
NUnit Test Adapter がインストールされているため、これはややこしいことです。テスト アダプターのランチパッド ページに、私の問題に似たものは何も表示されません。
ここからどこに進むべきかよくわかりません。これがうまくいかない場合は、xUnit.net、Microsoft の単体テスト フレームワークなどを使用するようにプロジェクトを作り直してもかまいません。NUnit を動作させることができれば、かなり素晴らしいことです。
ありがとう!