Visual Studio 2015/2017/2019 Test RunnerがxUnit v2テストを検出しないのはなぜですか


173

更新:2019を追加。検出/ランナー統合メカニズムは2017および2015と同じであるため、問題が発生する可能性のある重要な点は同じです。


xUnitランナーがテストを見つけられない理由を読みました。これは、xUnitテストを見つけられない理由をカバーしていますが、私の問題は異なります。(他の環境でも動作しますが、これは私のマシンのようです)-Visual Studio 2015 [Community Edition]のVisual Studio Test Runner は、私のテストをまったく表示していません。私はリモートでエキサイティングなことは何もしていません。テストはデスクトップ上のxUnit.net v2をターゲットにしています。

[出力]ウィンドウを確認しましたが、[ タブからの出力を表示]の[ テスト]には何も表示されません。



1
これは考えられる問題の1つにすぎませんが、テストエクスプローラーに表示する前に、テストプロジェクトをコンパイルする必要があります。
Niklas Peter、


これは私のために働いた- stackoverflow.com/questions/42861930/...
囚人ZERO

Xunit.Runner.VisualStudioをインストールすると問題が解決しました
Bendram

回答:


210
  1. お問い合わせから発見の例外を排除します。出力ウィンドウ(Ctrl-Alt-O)に移動し、表示出力をドロップダウン(Shift-Alt-S)からテストに切り替えて、ディスカバリー例外がないことを確認します

  2. テスト|テスト設定|デフォルトのプロセッサアーキテクチャは、テストがx86 / x64固有であり、ディスカバリーがbittedness関連の例外、つまりAnyCpuではない場合に役立ちます。

  3. この回答で示唆されているように(テクニックが役に立った場合はそれを支持します) デスクトップコンソールランナー(手順)を実行することは、他の可能性を排除するための適切なクロスチェックになる可能性があります。

    packages\xunit.runner.console.2.2.0\tools\xunit.console <tests.dll>

    xunit.runner.consoleパッケージは非推奨です。VSで機能するものを取得dotnet testすると、CIコンテキストでも実行できるようになります。


ドキュメントを読んでください -包括的で最新であり、トラブルシューティング情報が含まれ、PRを取得します:-

重要な注意:以前にxUnit.net Visual Studio Runner VSIX(Extension)をインストールしている場合は、最初にアンインストールする必要があります。現在、Visual StudioランナーはNuGet経由でのみ配布されています。削除するには、[ ツール] > [ 拡張機能と更新]に移動します。リストの一番下までスクロールし、xUnit.netがインストールされている場合はアンインストールします。これにより、Visual Studioを再起動する必要があります。

テストの検出または実行に問題がある場合は、Visual Studio内のランナーキャッシュが破損している可能性があります。このキャッシュをクリアするには、Visual Studioのすべてのインスタンスをシャットダウンしてから、フォルダーを削除します%TEMP%\VisualStudioTestExplorerExtensions。また、プロジェクトが単一バージョンのVisual StudioランナーNuGetパッケージ(xunit.runner.visualstudio)に対してのみリンクされていることも確認してください。

次の手順でうまくいきました。

  1. (あなたのマシンに深刻な混乱があると疑っている場合のみ-一般に、より一般的なケースは、Visual Studio統合がまだインストールされていないことです)

    DEL %TEMP%\VisualStudioTestExplorerExtensionsアドバイス通りにしてください:-

    PS> del $env:TEMP\VisualStudioTestExplorerExtensions

  2. xunit.runner.visualstudioすべてのテストプロジェクトにNuGetパッケージをインストールする

    • パケット:

      .paket\paket add nuget xunit.runner.visualstudio -i

      あなたはあなたの中で次のようになる必要がありますpaket.dependencies

      nuget xunit.runner.visualstudio version_in_path: true

      version_in_path: trueビットが重要であることに注意してください

    • Nuget:Package Manager Console(Alt-T、N、O)に移動し、

      Install-Package xunit.runner.visualstudio)

    最終的にxunit.runner出力ディレクトリになるように再構築します

  3. テストエクスプローラーを閉じる<-これは私にとって欠けていたビットでした

  4. テストエクスプローラー(Alt-S、W、T)を再度開きます。

  5. すべてのテストを実行(Ctrl R、A)


12
「テストエクスプローラーを閉じる<-これは私にとって欠けていた部分でした」これは、私が見逃した最も重要なステップであり、5時間かけて把握しました。ありがとう、私は手順に注意を払うべき
Esen

1
xunit VSランナーは私のslnのために働いていました。しかし、それは1日現れなくなった。私が実行しているVSをインストールしなかったことがわかりました、そしてそれはおそらくランナーがインストールされている他のslnによって残されたキャッシュのために機能していました。ランナーをインストールした後、問題はありません。すべてのslnにランナーをインストールすることを忘れないでください。
ZZZ

1
これは信じられない。他に3つの空のフォルダが含まれるフォルダを削除すると、問題が修正されました。
t3chb0t 2017年

1
@martinJH(OPにリンクされています):- stackoverflow.com/questions/16214684/… ;)私がどのようにそれを発見したかは明らかにしていません
Ruben Bartelink 2017

1
本当に奇妙なことですが、%TEMP%\VisualStudioTestExplorerExtensionsVSを削除して再起動すると、ようやく動作しました!
Hinrich

35

テストプロジェクトのCPUをx64に変更した後、テスト設定を変更する必要がありました。その後、テストが再び検出されました。

Architecture


テスト検出出力で、その前にメッセージが表示されましたか?
Ruben Bartelink 2017年

いいえ、エラーは表示されませんでした。理解するのにしばらく時間がかかりました。
最大

うーん; 奇妙な(私の回答の上部を参照-どこを見るかを説明します。通常、これにはフラグが付けられます(ただし、メッセージがどこにもないdefケースがあります))
Ruben Bartelink

これで解決しました。これが役立つ理由はわかりませんが、役立ちます。
VSO

2
私は掃除しなければなりませんでした->変更後に再構築しました。
user2023861

32

上記の解決策はどれも私にとってはうまくいきませんでした(dotnetcore 1.1、VS2017)。ここでそれを修正したものです:

  1. NuGetパッケージを追加 Microsoft.TestPlatform.TestHost
  2. NuGetパッケージを追加 Microsoft.NET.Test.Sdk

これらは以前にインストールしたこれらのパッケージに追加されます。

  • xunit(2.3.0-beta1-build3642)
  • xunit.runner.visualstudio(2.3.0-beta1-build1309)

9
これは私を助け、xunit.runner.visualstudioパッケージが欠けていました。
Ognjen Babic

私の.NET 4.72 MSテストプロジェクトはTestPlatform.TestHost、VS 2017からVS 2019に移行する場合にのみ必要です。
ΩmegaManSep

これで解決しました。「出力」ウィンドウで、ドロップダウンから「テスト」を選択します=>「TestHostがありません」というメッセージが表示されます。
ダッチン


14

次の手順に従ってください。

  1. あなたMsTest.TestAdapterMsTest.TestFramework dll'sから更新nugget package manager
  2. 溶液をきれいにする
  3. ソリューションを構築します。

1
この質問のクローンを開いて、私が行ったように自己回答してください。これはxUnit v2以降に関するものです。xUnit v1の回答でさえ、ここには場所がありません。質問の上部にもある参照でリンクすることも、質問でリンクすることもできます
Ruben Bartelink

このソリューションは機能します。それ以外の場合は、毎回削除する必要が%TEMP%\VisualStudioTestExplorerExtensionsあり、コンソールからテストを実行する必要がある場合もあります。
Venky

NUnitを使用していて、NuGetを介してNUnit3TestAdapterを最新バージョンに更新することでこの問題を解決しました。
dpberry178 2018

これをありがとう-私のインスタンスでは、Update-Package-MSTest.TestAdapterを再インストールする必要があり、テストがピックアップされました。
Rob

10

ASPコアプロジェクトとxUnit 2.2.0で作業している間、私はこれまで午後ずっと苦労してきました。私のための解決策は、への参照を追加することでしたMicrosoft.DotNet.InternalAbstractions

dotnet test失敗したテストプロジェクトを手動で実行しようとしたときにこれが見つかりましたInternalAbstractionsが、見つからないことが報告されました。自動検出が失敗したときに、テスト出力ウィンドウにこのエラーは表示されませんでした。ディスカバリーウィンドウで見た唯一の情報は戻りコードでしたが、それは現時点では何の意味もありませんでしたが、後から考えて、おそらくエラーを示していました。


「しかし、有用なエラーを報告しました」...どちらでしたか?また、OPに記載されているように、検出エラーウィンドウに確実に表示されなかったことを確認できます。 」?
Ruben Bartelink 2016年

1
更新された回答を参照してください。関連がある場合は、後で戻りコード情報を投稿します。
Tom Makin、

9

それは私に数回起こりました-私がプロジェクトをクリーンアップして再度ビルドするとき、それはうまくいく傾向があります。


ドロップダウンで[テスト]が選択されている状態で出力ウィンドウを見ると、わかりやすいメッセージはありますか?
Ruben Bartelink 2017年

2
いいえ、まったくありません。テストは見つかりませんでした
リアム

私の場合、テストエクスプローラーは以前に失敗したテストにぶら下がっていました。私がそれを参照して右クリック->実行または何かをしようとすると、VS全体がハングします。クリーンアンドリビルドを実行するだけで、テストステータスがクリアされ、問題が修正されました。
Piedone

単にビルド(つまりF6)は役に立たないということを付け加えてもかまいません。VSSolution Explorerでソリューションを右クリックし、[ソリューションの再構築]をクリックする必要があります。
ピエドーネ

8

テストクラスがパブリックであることを確認してください。


これは最初の但し書きで明示的に対処されています(その場合をカバーする別の質問にリンクします)。このQ + Aは、特定の環境で、他の場所で正常に機能するテストが正常に機能しない場合のトラブルシューティングに関するものです。私にとって、この答えは、その区別を薄めるので、問題を混乱させます。
Ruben Bartelink

1
本当にありがとうございました。あなたは私の日を救った。
hellouworld

7

私の場合の理由は、ターゲットビルドがプロジェクトデバッガーとテストランナーで同じではなかったためです。これらの要素を統合するには:

  1. Test> Test Settings> Default Processor Architecture。次に、X64またはX86を選択します。
  2. プロジェクト>(あなたのプロジェクト)プロパティ>ビルド(タブ)>プラットフォームターゲット。

それらが同一になった後、ソリューションを再構築すると、テストメソッドが表示されます。


6

2日間費やした後、上記のどれもうまくいきませんでした。唯一の「解決策」は、プロジェクトのプロパティ-> [ビルド]タブに移動しました。次に、ペインの右下隅にある[詳細]ボタンをクリックします。「デバッグ情報:」を「完全」に変更し、「OK」をクリックします。

ここにスクリーンショットがあります: ここに画像の説明を入力してください

ここに画像の説明を入力してくださいここに画像の説明を入力してください


痛いですね。共有してくれてありがとう。いつか誰かのお役に立てば幸いです。しかし、私は言う必要があります:デバッグ情報レベルが検出プロセスに影響を与える理由は考えられないので、「それが実際にクマを撃ったとは思わない」としか言えません-私が間違っているといいのですが;)
ルーベンBartelink 2017年

@RubenBartelinkはあなたに完全に同意します。それが私が引用で「解決策」を述べた理由です:)しかし、奇妙なことに、これを実行するとすぐに機能しました。
curiousBoy 2017

どうもありがとうございました。これも私にとっての修正でした:)
Babulaas

6

xUnit 2.2.0を使用しています。

私の問題は、私の解決策が特定のdllを見つけることができず、app.configそれらを解決しようとしていたことでした。エラーはVisual Studioのテスト出力ウィンドウに表示されませんでした。

インストールしxunit.runner.console、コマンドラインからテストを実行しようとしたときに、エラーを特定できました。

CLIでxunitテストを実行する方法


5

数日前に遭遇したエッジケースのソリューションを提供できます。これは、上記のすべてのシナリオに当てはまるソリューションではありませんが、エッジケースでは修正しました。

最新のVS 2017(バージョン15.5.7)とXUnit 2.3.1でも同じ問題が発生しました。xunit.runner.visualstudioパッケージがインストールされましたが、テストがVisualStudioの組み込みテストエクスプローラーに表示されませんでした。

.NET Framework 4.5を対象としたレガシープロジェクトに取り組んでいました。ただし、バージョン2.2以降。XUnitは4.5.2より前の.NETフレームワークをサポートしていません(リリースノートを参照-XUnit 2.2:2017年2月19日

テストプロジェクトのターゲットフレームワークをバージョン4.5.2以上に変更すると、うまくいきました。テストしているプロジェクトのバージョンを変更する必要はありません。テストプロジェクト自体の問題です。


5

Visual Studio 2019でも同じ問題が発生しました。次のNuGetパッケージをインストールするだけで問題は解決しました。

1)。xUnit

2)。xunit.runner.visualstudio

3)。Microsoft.TestPlatform.TestHost

4)。Microsoft.NET.Test.Sdk


3

これは、ビルド構成の現在のプラットフォームプロジェクトでビルドチェックボックスがチェックされていないことが原因である可能性もあります。[ビルド]をクリックします。構成マネージャー、テストプロジェクトのビルド列にチェックマークが付いていることを確認します(たとえば、 'x86')。

これは間違いなく私にとって有効な解決策でした。


stackoverflow.com/questions/16214684/…にある場合、これを賛成します。これはxunit2固有ではなく、優れたチェックリスト要素
Ruben Bartelink

3

ユニットテストを.NET Standard 2.0クラスライブラリに記述していないことを確認してください。この記事の執筆時点では、visualstudio runnerはnetstandard2.0クラスライブラリでのテストの実行をサポートしていません。

テストランナーの互換性マトリックスについては、こちら確認してください

https://xunit.github.io/#runners


3

VSがテストメソッドを検出しないという同様の問題に遭遇しました。私の場合、メソッドにstaticキーワードがあり、それを削除して機能しました。

[TestMethod]

Before: public static void Test1()

After: public void Test1()

1
これがVSの特定のインスタンスで見つからない他の点で正しいテストに関するものであるため、これがここになかった場合、私は本当に好みます。xunitテストが検出されない理由を自分で答えます:stackoverflow.com/questions/16214684/…。MSTestテストを取得できない理由を作成することをお勧めします(必要に応じてVSによって)。(あなたが知っているように、この特定の懸念はxUnitにも適用されません。これは、そのままでは役に立ちますが、あなたの答えがここに属さないもう1つの理由です)
Ruben Bartelink

クラスアクセス修飾子が内部にあるため、MSTestはテストを検出しませんでした。
Abdul Saboor

3
  1. すべてのVisual Studioインスタンスを閉じる
  2. %TEMP%\ VisualStudioTestExplorerExtensions \に移動します
  3. specrun関連のフォルダーを削除する
  4. 再試行

教えてください、ありがとう


2

私の場合、ソリューションには2つの異なるテストプロジェクトがありました。プロジェクト1のテストは見つかりましたが、プロジェクト2のテストは見つかりませんでした。最初にテストプロジェクト1をアンロードし、次にVSを閉じる>一時ファイルをクリアする>ソリューションを再度開く>再構築すると、VSがプロジェクト2テストを検出できることがわかりました。

2つのテストプロジェクト間で何かが競合している必要があると思います。これが、数分で起動して実行する最も速い方法でした。よじれは後で解決できます:)。


2

私は長い間この問題に苦しんでいました。

  • 約100のプロジェクトがあり、異なるサーバーに異なるバージョンがデプロイされていました。

  • 2.3.1でビルドが失敗したため、xunitを2.2.0から2.3.1に更新することは解決策ではありませんでした。

次に、xunit.runner.visualstudio2.3.1に更新したところ、すべてが正常に動作し始めました。このコマンドをパッケージマネージャーコンソールで使用して、xunit.runner.visualstudioパッケージを更新しました

Get-Project ComapanyName.ProjectName.*.Tests | Install-Package xunit.runner.visualstudio -Version 2.3.1

1

私にとって最も一般的な原因は、Visual Studioがテストしているライブラリとは異なるアーキテクチャを使用してテストを実行しようとしたことです。残念ながら、これがうまくいかないと思われる場所は複数あります。

VS 2017ではDefault.runsettings、テストプロジェクトなどで実行設定ファイルを作成してみてください。メインライブラリがx64の場合、内容は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <RunConfiguration>
    <TargetPlatform>x64</TargetPlatform>
  </RunConfiguration>
</RunSettings>

次に、このファイルを[テスト]-> [テスト設定]-> [テスト設定ファイルの選択]から選択します。

次に、[テスト]-> [テスト設定]、[デフォルトのプロセッサアーキテクチャ]で、正しいアーキテクチャをもう一度選択します。

ソリューション全体をクリーンアップしてビルドしてください。テストエクスプローラーウィンドウを閉じて再度開く必要がある場合があります。不適切なアーキテクチャタイプについての手がかりについては、[出力]-> [テスト]ウィンドウでその他のエラーを探します。

FYIの追加のテスト設定エントリはここにあります


1

テストエクスプローラーにテストが表示されない原因はもう1つあります。これは.pdb、Visual Studio 2017 / for .NET Coreで導入された新しいポータブルファイル形式と関係があり、一部のVSツールが機能しなくなる可能性があります。(背景:バグレポート「Mono.Cecilが新しい.csproj PDBでOutOfMemoryExceptionを引き起こす」を参照してください。)

新しいポータブル.pdb(デバッグシンボル)形式のため、テストが見つかりませんか?

  • 出力ウィンドウを開きます。
  • [ 出力の表示]のドロップダウン選択を[ テスト]に変更します。
  • 次のような出力が表示された場合(テストごとに1回繰り返される可能性があります)、この回答で説明されている問題が発生しています。

    Exception System.OutOfMemoryException, Exception converting <SignatureOfYourTestMethod>
    Array dimensions exceeded supported range.

はいの場合は、これを実行して問題を解決します。

  • テストプロジェクトのプロパティを開きます(ソリューションエクスプローラーでテストプロジェクトを選択し、Alt+ を押しますEnter)。
  • [ ビルド ]タブに切り替えます。
  • (そのタブページの最後にある)[ 詳細... ]ボタンをクリックします。
  • ドロップダウンラベルでデバッグ情報、選択nonepdb-onlyまたは、fullしかし、ありません portable。テストが見つからないのはこの最後の設定です。
  • [ OK]をクリックして、プロジェクトをクリーンアップして再ビルドします。より確実にしたい場合は、テストプロジェクトの出力ディレクトリに移動し、.pdb再ビルドする前にすべてのファイルをクリーンアップします。これでテストが復活しました。

1

VS 2017でIntelliTestを使用して最初のウォーキングを試みたとき、私に気をつけてください。

IntelliTestによってテストプロジェクトが自動作成されると、アセンブリ参照がMicrosoft.ExtendedReflection... \ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ Extensions \ Microsoft \ Pex \ Microsoft.ExtendedReflection。 dll)がありません。追加すると、生成されたテストは再コンパイル後にテストエクスプローラーに表示されます。


1

免責事項:Visual Studio 2015のxunitではなく、UWP単体テストアプリケーション(MSTest)のVisual Studio 2017についてです。私はこのスレッドで同じことを検索しているので、誰か他の人も同じことをするでしょう:)

私の解決策は、MSTest.TestAdapterとMSTest.TestFrameworkのnugetパッケージを更新することでした。UWPの単体テストアプリを作成するときに、最新バージョンが自動的に取得されないようです。


私が行ったように、質問に答え、自己を問うことは隔離などの情報への最善の方法であることをお勧めしたい-あなたはそれが理にかなっていると思えば、私の全体の問題とS / xUnitフレーム/ MSTestを/をコピー&ペーストすること自由に感じ;)
ルーベンBartelink

1

私の問題は、nuget xunit.runner.visualstudioをインストールすることで解決しました


1

私の場合、同じソリューションに複数のテストプロジェクトがあり、プロジェクトの1つだけが「テストエクスプローラー」を表示していませんでした

ソリューションを右クリックして、「ソリューションのNugetパッケージの管理」に移動しました。

「統合」タブの下で、プロジェクト間で同期されていない「テスト」ナゲットパッケージがいくつかあることに気付きました。「インストール」をクリックすると、不足しているテストが表示されました。


1

上記の提案のほとんどを試しましたが、何もうまくいきませんでした。私の場合、私はチームに属しており、同じソリューションの他の開発者向けのテストが表示されていました。そのため、.vsフォルダーを削除しようとしただけですが、そこにも運がありませんでした。

私は自分のローカルフォルダーを完全に削除し、リポジトリを再クローニングすることになりました。それで解決しました。


1

これが私たちのために働いたソリューションです。最高ではありませんが、1つはメリットがあるかもしれません。

バックグラウンド:

  • 私たちのスクリプトはVS 2013で開発され、NUnit VSアダプター2.1を使用しました。
  • 最近VS 2017に移行し、同じソリューションを開くと、テストがテストエクスプローラーに表示されませんでした

ビルド時に次のメッセージが表示されます。

[Informational] NUnit Adapter 3.10.0.21: Test discovery starting
[Informational] Assembly contains no NUnit 3.0 tests: C:\ihealautomatedTests\SeleniumTest\bin\x86\Debug\SeleniumTest.dll
[Informational] NUnit Adapter 3.10.0.21: Test discovery complete

解決策(一時的):

  • NUnit Adapter 3.10をアンインストールします...
  • NUnit VS Adapter 2.1をインストールします。

テストが表示されます。


これを明確な答えにするために、(少なくとも
表面

...「NUnit TestAdapter v3がNUnit v2テストを表示しないのはなぜですか?」および「ここにpingを実行しますb)「<link>も参照」を上部に配置します(わずかに薄い場合でも)。この回答のようxUnit v2 testsに、タイトルのとうまく合わないため削除されました
Ruben Bartelink 2018年

0

また、テストプロジェクト内に完全に空のapp.configファイル(マークアップがまったくなく、完全に空白)があるかどうかも確認してください。私の場合、これが犯人でした。


0

私の場合、図に示すような新しい「ソリューション構成」を作成しました。したがって、カスタム製品を「製品」として選択すると、何らかの理由でTestMehodsが認識されません。「デバッグ」に戻すと問題が解決します

ここに画像の説明を入力してください


0

JustMockも使用しているかどうかはわかりませんが、テスト検出を機能させるには、VS 2017でプロファイラーを無効にする必要がありました。


うーん。オンに戻すと、すぐに再び失敗しますか?
Ruben Bartelink 2017

うん。ソリューションを閉じ、プロファイラーをオンにして再び入ると、テスト検出が失敗します。
クリスドロビソン2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.