Azure Durable Functions を使用するプロジェクトがあり、それらは.NET Standard 2でのみ使用できます。つまり、プロジェクトのテストで使用できるクラスライブラリが定義されています。しかし、ユニット/統合テストでxUnit、NUnit、またはMSTestのいずれかが使用されるライブラリをまとめることはできません。
.NET Standard 2がクラスライブラリであるプロジェクトにNUnitを追加すると、次のエラーで失敗します。
情報:C:\ VSTS\github.com\netstandardXunitMsTestNunit\src\Netstandard2xUnitMsTestnUnit\nunit\nunit.csproj ...のパッケージを復元しています...デバッグ:.NETStandard、Version = v2.0のパッケージを復元しています...デバッグ:の競合を解決しています。 NETStandard、Version = v2.0 ...エラー:サイクルが検出されました。 nunit-> NUnit(> = 3.9.0)。デバッグ:.NETStandard、Version = v2.0でのパッケージの互換性の確認。デバッグ:nunit 1.0.0と.NETStandard、Version = v2.0の互換性を確認しています。
エラーはxUnitでも同じです(エラーメッセージはxUnitサイクルについて説明しています)。
どちらのエラーもRiderとVisual Studio 2017 Enterpriseで再現できます。 nugetキャッシュを削除した後、もう一度試してみました。結果は同じです。
MsTestの場合、msテストライブラリを追加できますが、テスト検出はRiderもVisual Studioも機能しません。
。NET Standard 2ライブラリの単体テストも可能ですか?
これらのプロジェクトが.NET Standard 2のものをピックアップするのを待つ以外に何かできることはありますか?
私は小さなサンプルプロジェクトを作成しました、ここで見つけることができます: https://github.com/SayusiAndo/netstandard2xunitresharper
.NET Standardにはランタイムがありませんので、テストは実行されません。
テストアセンブリは、.NET Frameworkや.NET Coreのバージョンなど、実行可能プラットフォームをターゲットにする必要があります。
<TargetFramework>net470</TargetFramework>
または
<TargetFramework>netcoreapp2.0</TargetFramework>
詳細は 異なるフレームワークでの.NET標準バイナリの実行 を参照してください。
.NET Standardは、各.NET Standardバージョン(.NET Framework、.NET Core、Xamarinなど)が、すべての.NET実装がそのバージョンに準拠するために提供する必要がある一連のAPIを定義する仕様です。ライブラリのターゲットフレームワークの値がnetstandard2.0である場合、.NET Coreアプリからだけでなく、.NET FrameworkまたはXamarin用にビルドされたアプリからもロジックライブラリを参照できます。
ただし、そのためのアプリは作成できず、ライブラリのみを作成できます。これが 。NET標準に関するMSDNドキュメント です。
したがって、ライブラリをテストする場合は、ライブラリがサポートするターゲットを指定する必要があります。また、複数の.NETバージョンをサポートする場合は、それらすべてをテストして、ライブラリがこれらのターゲットで正しく実行できることを確認する必要があります。 .csproj
のターゲットフレームワークの構成は次のとおりです。
単一ターゲット:
<TargetFramework>net461</TargetFramework>
複数のターゲット:
<TargetFrameworks>netcoreapp2.0;net461</TargetFrameworks>
私は最近、.NETStandard 2.0
が問題なく動作するプライベートユニットテストプラットフォームをリリースしました。テストに多くの時間と労力を費やしていない限り、 Nuclear.Test を確認することをお勧めします。
基本的に、テストプロジェクトのターゲットを.NETStandard
に設定すると、これらのテストは.NETFramework
および.NETCore
プロセスで実行され、両方が正しく機能するかどうかが確認されます。
残念ながら、これまでの最小バージョンとして.NETStandard 2.0
が必要です。幸いなことに、それを使用しています。
このソリューションはNUnitでもxUnitでもMSTestでもありませんが、あなたが説明したとおりに機能します。