web-dev-qa-db-ja.com

RUnitまたはVS 2017からNUnit、xUnit、またはMSTestを使用して.NET Standard 2ライブラリをテストする方法は?

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

9
SayusiAndo

.NET Standardにはランタイムがありませんので、テストは実行されません。

テストアセンブリは、.NET Frameworkや.NET Coreのバージョンなど、実行可能プラットフォームをターゲットにする必要があります。

<TargetFramework>net470</TargetFramework>

または

<TargetFramework>netcoreapp2.0</TargetFramework>

詳細は 異なるフレームワークでの.NET標準バイナリの実行 を参照してください。

17
NightOwl888
  1. フレームワークの同じ組み合わせでテストするために、.Net Framework 4.6.1を対象とするアプリケーションでクラスライブラリを使用する場合は、.Net Framework 4.6.1を対象とする同じソリューションで新しい単体テストプロジェクトを作成します。
  2. 単体テストプロジェクトの参照の下に、クラスライブラリプロジェクトへの参照を追加します。
  3. XUnitおよびxUnit.runner.visualstudio nugetパッケージを単体テストプロジェクトに追加します。
  4. ユニットテストクラスの名前を適切なものに変更し、MSTestディレクティブの使用をXUnitの使用に置き換えます。
  5. テストの作成と実行を開始します(ソリューションをビルド/再ビルドして、新しいテストごとにテストエクスプローラーのテストリストを更新します)。
4
Rob

.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>
4
Feiyu Zhou

私は最近、.NETStandard 2.0が問題なく動作するプライベートユニットテストプラットフォームをリリースしました。テストに多くの時間と労力を費やしていない限り、 Nuclear.Test を確認することをお勧めします。

基本的に、テストプロジェクトのターゲットを.NETStandardに設定すると、これらのテストは.NETFrameworkおよび.NETCoreプロセスで実行され、両方が正しく機能するかどうかが確認されます。

残念ながら、これまでの最小バージョンとして.NETStandard 2.0が必要です。幸いなことに、それを使用しています。

このソリューションはNUnitでもxUnitでもMSTestでもありませんが、あなたが説明したとおりに機能します。

0
MikeLimaSierra