web-dev-qa-db-ja.com

Visual Studio 2015または2017で単体テストが検出されない

編集2016-10-19:

元の質問は、XUnitテストランナーのあるVS2015 CTP6に特有の問題についてでした。答えから明らかなように、Visual Studioでの単体テスト検出にはもっと広範な問題があります。これはさまざまな状況で発生する可能性があります。私はそれを反映するために私の質問を整理しました。

私は自分の答えにスクリプトを含めました。それは、現時点で同様の問題が発生したときに解決するために今でも使用しています。

他の多くの答えもVSテストランナーの複雑さをよりよく理解するのに役立つと証明されています。私は人々がまだ解決策を共有していることを感謝しています!


元の質問2015-04-10:

昨日から、私のVisual Studioテストエクスプローラは私のプロジェクトのどれのためのテストも発見しないでしょう。構築後も緑色の読み込みバーは表示されません。

Visual Studioのテストエクスプローラに移動して[すべて実行]をクリックするか、テスト方法を右クリックして[テストの実行]を選択すると、出力ウィンドウに次のように表示されます。

Could not load file or Assembly 'Microsoft.VisualStudio.Web.ProjectSystem, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

Windows 10 Proテクニカルプレビュー、ビルド10041でVisual Studio 2015 CTP 6を実行しています。NETFrameworkのバージョンは重要ではないようです - 4.04.5.2および4.6で発生します。

私は以下のテストフレームワークを試してみましたが、それらすべてが同じ振る舞いをします。

  • Microsoft.VisualStudio.QualityTools.UnitTestFramework v14.0.22609.0
  • xunit v2.1.0-beta1-build2945xunit.runner.visualstudio v2.1.0-beta1-build1051
  • NUnit v2.6.4NUnitTestAdapter v2.0.0

私はGitHub(xunit)で似たような問題を見つけました: xunitチームからのこのコメントでは#295 というテストを発見できません:

Visual Studio 2015 CTP 5は、単体テスト全般(xUnit.netだけではない)を持つ多くの人々によって破壊されていると報告されているので、それがうまくいくとは思わないでください。

また、Visual Studioのランナーキャッシュを消去したことを確認してください。それが破損した場合、Visual Studioはそれが削除されるまで恒久的に不正な動作をします。キャッシュをクリアするには、Visual Studioのすべてのインスタンスをシャットダウンしてから、フォルダ%TEMP%\ VisualStudioTestExplorerExtensionsを削除します(正直なところ、%TEMP%内の削除可能なものすべてを削除しても問題ありません)。

私は彼らにフォルダ%TEMP%\VisualStudioTestExplorerExtensionsを削除するよう提案してみました。残念ながらそれで問題は解決しませんでした。

私はReSharperが実際にいくつかのテストを発見できることに気づいた。これはVSとNUnitテストでのみ動作し、xunitでは動作しません。

クリアする必要がある一時フォルダまたはキャッシュフォルダが必要ですが、Visual Studioにはそれらの多くがあり、それらすべてを不要な副作用なしに削除できるわけではないことを私は知っています。

151
Fred Kleuver

編集2016-10-19(PowerShellスクリプト)

この問題は今もなお返ってきます。私は私のために関連するcache/tempフォルダ/ファイルをクリアすることを自動化するために小さなPowerShellスニペットを書きました。私はそれを将来の読者のためにここで共有しています:

@(
"$env:TEMP"
"$env:LOCALAPPDATA\Microsoft\UnitTest"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\1033\SpecificFolderCache.xml"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\1033\ProjectTemplateMRU.xml"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\ComponentModelCache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\Designer\ShadowCache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\ImageLibrary\cache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio Services\6.0\Cache"
"$env:LOCALAPPDATA\Microsoft\WebsiteCache"
"$env:LOCALAPPDATA\NuGet\Cache"
) |% { Remove-Item -Path $_ -Recurse -Force }

あらかじめVisual Studioを閉じてから再起動することをお勧めします。

TEMPフォルダを削除する必要はないかもしれませんし、場合によっては望ましくない場合もあるので、最初にTEMPフォルダをクリアせずに試すことをお勧めします。 "$env:TEMP"を省略するだけです。

オリジナルの答え2015-04-12

問題は、Visual Studio関連の一時/キャッシュフォルダを徹底的にクリーニングした後で「解決」しました。

すべてを1つずつ調べて、その間にテストする時間がなかったので、残念ながら、どれが実際に問題を引き起こしたのかわかりません。

これらは私が取った正確なステップです:

  1. クローズドビジュアルスタジオ
  2. システムとブラウザのtempファイル/フォルダをクリアするためにCCleanerを使いました
  3. 次のファイル/フォルダを手動で消去/削除します。

    • %USERPROFILE%\AppData\Local\Assembly
    • %USERPROFILE%\AppData\Local\Microsoft\UnitTest
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\1033\SpecificFolderCache.xml
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\1033\ProjectTemplateMRU.xml
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\Designer\ShadowCache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\ImageLibrary\cache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio Services\6.0\Cache
    • %USERPROFILE%\AppData\Local\Microsoft\WebsiteCache
    • %USERPROFILE%\AppData\Local\NuGet\Cache
    • %USERPROFILE%\AppData\Local\Temp
29
Fred Kleuver

驚いたことに、%TEMP%ディレクトリにある一時ファイルをクリアすることで問題は解決しました。

注:このパスは通常C:\Users\(yourusername)\AppData\Local\Tempにあります。

@ Warren-Pに含まれているように、スタートメニューに%temp%を入力するか、または "File Explorer"を起動してアドレスバーに%temp%を入力することでtempフォルダに移動できます。

147
RobM

コードがx64でコンパイルされているため、デフォルトプロセッサアーキテクチャをX64として有効にする必要があります。

Test > Test Settings > Default Processor Architecture > X64
87
Dac Toan Ho
  • NUnit Test Adapter 2/3がVisualStudioにインストールされている場合は、チェックアウトしてください。
    (Tools>Extensions and Updates )

  • 正しいプロセッサアーキテクチャが選択されていることを確認してください。
    (Test>Test Settings>Default Processor Architecture)

63
MichiBack

この問題の1つの理由はあなたのテストクラスが一般に公開されていないことです。 MSTestはパブリッククラスからのテストのみを検出します。

20
AfshinS

Visual Studio 2015(Update 3)でテストエクスプローラにテストを添付したい場合は、NUnitテストアダプタをインストールする必要があります。 [ツール] - > [拡張機能と更新プログラム] - > [オンライン]タブ(アダプタを検索する必要があります) - > [ダウンロード]。 Visual Studioを再起動すると、テストフレームワークの変更を確認できます。

13
Pankti Shah

私はこれに対する完全な答えを持っていません、しかし私はテストプロジェクトで遊ぶことによっていくつかのことを決めました:

  1. 正式なbeta4 aspnet5リリースの一部であると思われるxunit.runner.aspnet : 2.0.0-aspnet-beta4は、Visual Studioでは機能しません。
  2. 代わりに、"xunit": "2.1.0-*"および"xunit-runner.dnx": "2.1.0-*"パッケージを使用しても、Visual Studioで機能します。
  3. VSがテストを発見するためには、あなたのプロジェクトは "xunit.runner.dnx"を実行する "test"という名前のSINGLEコマンドを持たなければなりません。追加のコマンドを追加すると壊れる可能性があります。
  4. それでもTest Explorerウィンドウが空になってしまう場合は、プロジェクトから「test」コマンドを削除してからソリューションを再構築し、次に「test」コマンドをproject.jsonに追加し直してください。
  5. @ Fred-Kleuverの提案どおりにすべてのキャッシュをクリアすると解決する場合がありますが、すべての手順を個別に実行したわけではないので、よくわかりません。

これは、デイリーではなく、ベータ4リリースを使用して、VS 2015 CTP 6に準拠したものです。

9
Avi Cherry

次のようにいくつかのテストが選択されなかったasyncというインスタンスがありました。

public async void This_IsMy_UnitTest()

問題は、Taskではなくvoidを返すようにするのを忘れたことです。私が切り替えをしたとき。これはエラーやテストの失敗の原因になると思いますが、それは不可能です。そのクラスの単体テストは完全に無視され、存在しないように動作しました。

テスト実行を見て失敗したのは、3回クリーンアップしてVS.NETを再構築した後ではなく、Task戻り型を追加するのを忘れたためです。

public async Task This_IsMy_UnitTest()

更新後、単体テストが見つかり、正しく機能しました。これはEdgeのケースかもしれませんが、内部でasyncを使用するためのawaitテストを使用していても署名が正しくない場合、これと同じ問題が発生する可能性があります。

9
atconway

以下のようにNugetパッケージマネージャに行き、Nunitアダプタをダウンロードしてください。

enter image description here

8
Debendra Dash

私の場合の解決策は、私のVisual Studio 2015にNUnit 3テストアダプタ拡張機能をインストールすることでした。

'Extensions and Updates' is present under 'Tools' meue

5
Umar T.

ただ再起動Visual StudioとTest Explorerで "Run All"を実行してください...それから私のテストはすべて発見されます。

5
lukyer

私は同じ代名詞を持っていましたが、私がそれを作成するという考えを持っていたので、私はそれを作成するという考えを持っていたので、フォルダー "%TEMP%\ VisualStudioTestExplorerExtensions"は私のマシンに存在しませんでした。テストエクスプローラは今私のすべてのテストを表示することができます。ありがとう。

5
Vinci

私の場合(Visual Studio Enterprise 2015 14.0.25425.01 Update 3、Resharper 2016.2)、[ビルド]メニューからクリーンな解決方法を実行するだけで済みました。ソリューションを再構築すると、テストエクスプローラは「起動」し、すべてのテストをもう一度見つけます。

4
sammy34

これはたいていの人には役に立たないでしょうが、単体テストに不慣れな人がboolの代わりにvoidを返すテストメソッドを書いていました:

[TestMethod]
public bool TestSomething()

戻り値の型をvoidに変更すると問題が解決しました。

3
Sam

私の場合、VS 2015の下のMSTestは、174文字を超えるテスト(メソッド)名を持つテストを無視していました。名前を短くするとテストが見えるようになりました。これはテスト名を操作することによる推測とチェックによって決定されました。

3
Kenneth K.

私の場合、問題は「椅子とキーボードの間」でした。私は、ビルド時に自分の単体テストプロジェクトを含まないConfiguration Managerの設定に切り替えました。すべてのプロジェクトを含む設定(デバッグなど)に戻すと問題が解決しました。

3
AndyZez

テストプロジェクトpackages.configにxunit.runner.visualstudioパッケージがあり、それが正しく復元されたことを確認します。

私はこれが最初の質問の場合ではないことを知っていますが、それは私のような人のために時間を節約することができます。

3
pvasek

私は上記のものとは全く異なる解決策を見つけたことを付け加えたいと思います。

テストクラスを以下のように宣言しました。

[TestClass]
class ClassificationTests
{
   //unit tests
}

クラスにpublic修飾子を追加するとすぐに、それは期待どおりに機能しました。

3
Persistence

.NET Standardまたは.NET Coreをターゲットにしている場合は、NUnit Test AdapterにはNuGetパッケージを使用し、拡張子ではない _を使用する必要があります。

.NET Coreまたは.NET Standardプロジェクトをテストしている場合は、NuGetからアダプタをインストールすることをお勧めします。 VSIXパッケージは複数のプラットフォームをターゲットにできないため、VSIXアダプタは.NET Coreをサポートしていません。

出典: NUnit GitHub Wiki

また、FAQも確認してください。

私のテストはVisual Studio 2017では表示されません?

  • NuGetパッケージを使っていますか?
  • バージョン3.8.0以降のNuGetパッケージを使用していますか?
  • テストは.NET Coreまたは完全な.NET Frameworkのどちらを対象としていますか? (上記を参照)
  • あなたはMicrosoft.NET.Test.Sdkへのパッケージ参照を追加しましたか?
  • Visual Studioを再起動しましたか?それはまだ少し気まぐれです。

出典: NUnit GitHub Wiki

2
m93a

どういうわけか私のプロジェクトは静的ライブラリ(.lib)としてコンパイルするように設定されていました。これを動的ライブラリ(.dll)に変更した後、Visual Studio 2012によって正しく検出された場所でテストします。

My Unit Test Project ->
Properties ->
Configuration Properties ->
General ->
Configuration Type
1
Maate

私はこの素晴らしい小さな機能にも噛まれていて、ここで説明されているものは何も私のために働かなかった。私がビルド出力を再確認して、関連するプロジェクトがビルドされていないことに気付くまでは、そうではありませんでした。構成マネージャを訪問したことで、私の疑いが裏付けられました。

Visual Studio 2015では、私は新しいプロジェクトを追加することができましたが、それらを構築する価値はないと判断しました。プロジェクトをビルドに追加すると、うまく機能し始めました。

1
Robbie Dee

ファイル\ AppData\Local\Microsoft\VisualStudio\14.0\1033\SpecificFold erCache.xmlを削除すると問題が解決しました。

1
der_chirurg

私がこの問題を修正するのはとても簡単でした。

  • ユニットテストプロジェクトを選択してください
  • ソリューションエクスプローラの[すべてのファイルを表示]ボタンをクリックすると、新しい一時ファイルがソリューションエクスプローラのファイルツリーの[obj\x86\Debug]内に表示されます。
  • これらの一時ファイルを削除してプロジェクトを再構築してください。
  • テストを実行しようとしましたが、うまくいきました。
1
mggSoft

X64を次のように変更して解決しました。プロジェクトを右クリック - >プロパティ - >ビルド - >プラットフォームターゲット - > Any CPU

1

私の解決策を共有するために飛び込む。私はWindows 10、Visual Studio 2015、NUnit 3.5、NUnit Test Adapter 3.6(NuGet経由で、VISXの拡張機能ではありません)を使っていましたが、私のテストはどれも発見されませんでした。私の問題は、私のソリューションのTestsプロジェクトで、どういうわけか私の "Documents"フォルダへのショートカットがプロジェクトフォルダ内に作成されていたことでした。私はテストアダプタがショートカットを見てそれをどうするかを考え出そうとしてハングアップしていたのではないかと思い、ユニットテストを表示できませんでした。

1
Thomas Parikka

私のテストプロジェクトがapp.configを含んでいたので、これは私に起こりました。それはアセンブリリダイレクトのためにNuGetパッケージによって自動的に追加されました、しかし私のテストはそれなしでうまく動くようでした。

https://developercommunity.visualstudio.com/comments/42858/view.html を参照してください。

1
Ohad Schneider

同じ問題がありました。複数のC#プロジェクトとさらに多くのテストプロジェクトを含む、大きなVS 2015ソリューションがあります。

Resharperのテストディスカバリはうまくいったが、VS Test Explorerはひどく失敗した。

プロジェクトが同じバージョンのMsTest TestFrameworkとTestAdapterを持っていなかったこと、そして時々彼らはNuGetsや他の時代の古き良き参照を使っていたことが判明しました。

すべてのMicrosoft.VisualStudio.Test *参照を削除してから2つのMSTest NuGetsを追加/更新すると、問題は解決しました。

1
TommyD

私は自分のテストプロジェクトのターゲットフレームワークがテスト中のプロジェクトとは異なることを認識することでこの問題を解決しました。はい、ターゲットフレームワークをデフォルト(Project> Properties> Application)から変更することでこの問題を引き起こしましたが、数週間後に作成されたテストプロジェクトではこれに失敗しました。不一致によってコンパイラエラーが発生することはありませんでしたが、エラーリストウィンドウに警告が表示されました。警告を表示するオプションを選択すると、解決策は明らかになりました。

0
JerryM

2日を過ごした後...上記のどれも私のために働きませんでした。唯一の「解決策」は次のとおりです。プロジェクトプロパティ - >ビルドタブに移動します。次に、ペインの右下隅にある[詳細設定]ボタンをクリックします。 「デバッグ情報」を「フル」に変更して、「OK」をクリックします。

これがスクリーンショットです。 enter image description here

enter image description hereenter image description here

0
curiousBoy

Windows Defender Serviceを無効にします。これを直ちにオフにすると、私のすべてのユニットテストがTest Explorerに表示されました。

0
Brad Johnson

[TestClass]属性を持つクラスが public であり、 private でないことを確認してください。

0
alex

私は同じ問題を抱えていました。 Visual Studio 2015(Update 3)の単体テストテンプレートは、TestContextプロパティが次のように定義されたクラスを生成します。

    private TestContext testContextInstance;

    /// <summary>
    ///Gets or sets the test context which provides
    ///information about and functionality for the current test run.
    ///</summary>
    public TestContext TestContext
    {
        get
        {
            return testContextInstance;
        }
        set
        {
            testContextInstance = value;
        }
    }

それをパブリックフィールドに変更した後(醜い)、テストランナーはテストを発見することができました。

public TestContext TestContext;

非常に奇妙な振る舞いですが、それが私の場合の問題の原因でした。

0

私は同じ問題を抱えていました。私はプロジェクトをきれいにして再構築したところ、不足していたテストを見ることができました。

0
Eric

VS出力ペイン(テストビューに切り替え)には、次のエラーがありました。

ファイルまたはアセンブリ 'XXX.UnitTest、バージョン= 9.4.0.0、カルチャ=ニュートラル、PublicKeyToken = 14345dd3754e3918'、またはその依存関係の1つをロードできませんでした。厳密な名前検証に失敗しました。 (HRESULTからの例外:0x8013141A)

テストプロジェクトのプロジェクト設定の[署名]タブで、誰かが[アセンブリに署名]をオンにしました。チェックを外してビルドするとテストが表示されました。

同僚もこの投稿からレジストリにキーを追加することで同じ問題を解決しました:

https://blogs.msdn.Microsoft.com/keithmg/2012/03/20/strong-name-validation-failed-exception-from-hresult-0x8013141a/

0
Scott Langham

テストが見つからない可能性があるもう1つの理由を付け加えたいと思います。私の場合は、見つからなかったC++単体テストに関するものです。

私の場合、出力ディレクトリがプロジェクトディレクトリ内に含まれていなかったため、特定のプロジェクトのテストが見つかりませんでした。これを変更すると、確実にテストが見つかりました。

0
Marcus

このトピックはやや古くなっていますが、VS2015で欠けているテストステータスに対する私の解決策は以下のとおりです。

Task-statusはDebug buildconfigurationにのみ表示されます。もちろん、これはまたテストエクスプローラを通してあなたのテストをデバッグすることを不可能にします。

0
pehur

私のために働いた唯一のものは次のとおりでした:C:\ Users(yourusername)\ AppData\Local\Tempを削除します。

他の提案は通常有効です。しかし、何らかの理由で、VSがあなたの変更を拾わずに出力に吠え続けているのであれば、テストを見つけることができないので、このディレクトリを掃除することがトリックをすることができます。そして、はい、それはあなたが立ち上げたばかりの "いつか"であり、あなたの解決策のどれももはやうまくいかないかもしれません、 "昨日"がすべてうまくいった場合。

0
Roland Roos

私はVSTestフレームワークと私のネイティブユニットテストのために同じ問題に苦しんでいました。

そのため、前述のことをすべて実行した後、私は自分のソリューションのディレクトリパスにある '#'記号をすべて削除しました。それは実際にうまくいきます。

私は将来この質問を見つけるグーグルのためにここにそれを残しています。

0

テストメソッドにパラメータがないことを確認してください。これはあなたのテストが現れないもう一つの方法です。

エラーや警告はありません。

0
Khan

非同期メソッドを作成してもvoidを返すのを間違えました。

変更:public async void Test()

public async Task Test()

0
Vishal

複数のAppファイルまたはWeb.Configファイルを扱う場合例えば:

enter image description here

それはあなたがRELEASE MODEであるConfigを使用していて、それがConfigからデバッグモード設定を削除するでしょう:

  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />

設定をデバッグモードを削除しないものに変更します。

0
Jeremy Thompson