Visual Studio 2015または2017が単体テストを検出しない


165

2016-10-19を編集:

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

私自身の回答にもスクリプトが含まれています。これは、今日でも同様の問題が発生したときに解決するために使用しています。

他の多くの回答も、VSテストランナーの複雑さの理解を深めるのに役立ちます。私は人々が彼らの解決策をまだ共有していることに感謝しています!


元の質問2015-04-10:

昨日以来、私のVisual Studio Test Explorerは私のプロジェクトのテストを発見しません。ビルド後も緑色のロードバーは表示されません。

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にVisual Studio 2015 CTP 6を実行しているプロのテクニカルプレビュー、10041. .NET Frameworkではバージョンは関係していないようビルド-それは上が起こる4.04.5.24.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)で同様の問題が見つかりました:テストを検出できません#295、xunitチームからのコメント:

Visual Studio 2015 CTP 5は、(xUnit.netだけでなく)一般的にユニットテストを行っている多くの人々によって壊れていると報告されているため、それが機能することを期待しないでください。

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

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

私はReSharperのが実際にいることに気づいていますいくつかのテストを発見することができ。VSおよびNUnitテストでのみ機能し、xunitでは機能しません。

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


3
私がこれに偶然出会ったことをうれしく思います。それは、なぜサードパーティのテストランナー(私の場合はncrunch)を使用しているのかを思い出させてくれます。同様の理由で、私はずっと前にmstestをあきらめました。もちろん、mstestに悩まされている場合、それは解決策ではありません...
Abel


VS 2017では、信じられないほど十分に、tempおよびlocalappdata VS2017関連フォルダーのクリーニング、閉じる+リロード+クリーンソリューション、およびWindowsの再起動は役に立ちませんでした。ただし、驚いたことに、私のテストプロジェクトの1つだけにある「アンロード-リロード」プロジェクトは、テストの検出が停止するのを助けました。サードパーティの単体テストパッケージを使用していません。
Pac0 2017年

一部のpplの場合、これは興味深いか、より関連性があるかもしれません(回答として追加する必要はないと思います):テストエクスプローラーにソースがありません-github.com/Microsoft/testfx/issues/274
hB0

これは誰かの修正である可能性があります。stackoverflow.com
1566372

回答:


154

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

注:このパスは通常、 C:\Users\(yourusername)\AppData\Local\Temp

@ Warren-Pが含まれているので%temp%、スタートメニューに移動して一時フォルダに移動するか、「ファイルエクスプローラ」を起動%temp%してアドレスバーに入力します。


30
または%TEMP%、[スタート]メニューの[ファイル名を指定して実行]に入力するだけで 、tempの値がわからなくても、tempフォルダが検索されます。
ウォーレンP

65
@ZéCarlos重要なデータを%TEMP%ディレクトリに保存するアプリケーションはすべて、動作を停止するに値します。
Mark Pattison、2016年

25
恥ずかしいことではありませんが、1000米ドル以上のIDEを実行し続けるためにこのようなとんでもない手順を実行しなければならないのは、Microsoftのまったくの失敗です。
MushyPeas 2017年

8
VS2017でも私のために働きました!
Lorentz Vedeler

6
一時ディレクトリ全体をクリアすることに関心がある場合は、Temp \ VisualStudioTestExplorerExtensionsサブディレクトリをクリアするだけで問題が解決するようです。
マイクウォルシュ2017

90

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

Test > Test Settings > Default Processor Architecture > X64

3
これは私を数回噛みました。これらすべての年が経過した後でも、プロジェクトの現在のビルド構成に自動的に一致するようにデフォルトでテスト設定が選択されていない理由はまだよくわかりません。私には無意味な重複設定のように思えます。
ニュートリノ2017年

1
WindowsのアップデートまたはVSのアップデートにより、デフォルトのアーキテクチャが変更されることなく通知されます... aaargh
rupweb

そして4年後、これはまだ役に立ちます。ありがとう
Oscar O.

67
  • Visual StudioにNUnit Test Adapter 2/3がインストールされているかどうかを確認してください。
    (Tools>Extensions and Updates )

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


2
これは、最終的に私のために働いたものです。他のすべてを試した後。
BradStell 2016

拡張機能がインストールされていない場合でも、一時フォルダを最初に探し回るように感じます。これを投稿してくれてありがとう。
NightOwl888

2
また、正しい拡張子を使用しているかどうかも確認してください。NUnit 2.xとNUnit 3.xには別のものがあります。
pmbanka

1
.NET Standardを対象とする場合、実際には、VSIX拡張ではなく、NuGetパッケージのNUnit Test Adapterをインストールする必要がありますgithub.com/nunit/docs/wiki/.NET-Core-and-.NET-Standard
m93a

VSIXではなく、nugetからNUnit3TestAdapterを取得してみてください。それはより良いアプローチです
ラヴェラ

33

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

この問題はまだ時々繰り返されます。小さなPowerShellスニペットを作成して、関連するcache / tempフォルダー/ファイルのクリアを自動化しました。今後の読者のためにここで共有します。

@(
"$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関連のtemp / cacheフォルダーを完全にクリーニングした後に「解決」されました。

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

これらは私が取った正確な手順です:

  1. 閉じたVisual Studio
  2. CCleanerを使用してシステムとブラウザをクリア tempファイル/フォルダー
  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

ありがとうございます。Microsoft\ VisualStudio \ 14.0 \およびMicrosoft \ VisualStudio Services \ 6.0 \ Cacheフォルダーをクリアした後、私のために働いてくれました。
Niels van Reijmersdal、2015年

確かに意味\Microsoft\VisualStudio\14.0\ImageLibrary\ImageLibrary.cacheですか?
Mateen Ulhaq 16

2
%TEMP%からすべてを削除しましたが、機能しませんが、 'VisualStudioTestExplorerExtensions'ディレクトリ(空)を読み取ると、everywhingは完全に機能します:-)(このソリューションの下部には現在の
anserwがあり

このソリューションがVS2015 Update 3とResharper 10で機能することを確認したいのですが、奇跡を見るには再起動する必要があります
Quoc Nguyen

1
1つのファイル\ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ 1033 \ SpecificFolderCache.xmlのみを削除しました
Serhii Kuzmychov

21

この問題の1つの理由は、テストクラスがパブリックではないことです。MSTestはパブリッククラスからのテストのみを検出します。


1
これは100%正確ではなく、非公開クラスが正常に機能していましたが、ある時点で、単体テストが機能しなくなりました。単体テストクラスをパブリックに変更すると、再び機能し始めました。ゴーゴー!
SashaArz 2017年

これで解決しました。デフォルトでは、Visual Studioはpublicキーワードなしでテストクラスを追加します。テストクラスは、公開するまで表示されません。
Marc Fearby

13

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


2
あなたの指示に従って、私は「nunit」を検索し、「NUnit 3テストアダプター」を見つけました。「ダウンロード」(インストール)の後に、私の問題を解決しました。この問題をインターネットで検索すると、リンクで
Adam Cox

これは、構成ファイルを変更しないため、一部のシナリオではNugetパッケージマネージャーより優れています
GY_

1
@GY_ですが、.NET CoreまたはStandardをターゲットにしている場合、実際にはNuGetパッケージが必要です。以下の私の回答を確認してください:stackoverflow.com/a/47460221/1137334
m93a

あなたは私の命を救います!おかげで、私は非常に多くの解決策を試しましたが、うまくいきませんでした。鉱山はグーグルテストアダプターでした。
Erman、

9

これに対する完全な答えはありませんが、テストプロジェクトで遊んでいくつかのことを決定しました。

  1. xunit.runner.aspnet : 2.0.0-aspnet-beta4公式beta4のaspnet5リリースの一部のように見えるというVisual Studioで作業をしません。
  2. 代わりに、使用する"xunit": "2.1.0-*"と、"xunit-runner.dnx": "2.1.0-*"パッケージは、Visual Studioで作業を行います。
  3. VSがテストを検出するには、プロジェクトに「xunit.runner.dnx」を実行する「test」という名前のSINGLEコマンドが必要です。コマンドを追加すると、機能しなくなる可能性があります。
  4. それでもテストエクスプローラーウィンドウが空のままの場合は、プロジェクトから「test」コマンドを削除し、ソリューションを再ビルドしてから、「test」コマンドをproject.jsonに追加して戻します。
  5. @ Fred-Kleuverの提案に従ってすべてのキャッシュをクリアすると役立つ場合がありますが、すべての手順を個別に実行したわけではないため、わかりません。

これはVS 2015 CTP 6による最新版であり、日次ではなく、ベータ4リリースを使用しています。


1
さて、上記の修正でキャッシュや一時ファイルをクリアする必要がないことを(同僚に試してもらうことで)確認しました。
Avi Cherry

上記は「代わりに、「xunit」を使用して:「2.1.0- 」および「xunit-runner.dnx」:「2.1.0-」パッケージはVisual Studioで機能します。」と述べています。これでうまくいきます!
Gillardo、2015年

ところで、フォローアップとして、現在のリリースの時点でVS 2015ですべてが正常に機能しているようです。新しいテストを表示するために大騒ぎする必要はありません。
Avi Cherry

1
最後に、MSからは、どのバージョンのxunitをどのバージョンのDNXで使用するかについての適切なガイドがここにあります。 xunit.github.io docs getting
Avi Cherry

9

async次のようにしたため、一部のテストがピックアップされない場合がありました。

public async void This_IsMy_UnitTest()

問題は、私がそれらを返すことを忘れてしまったことTaskでしたvoid、切り替えを行ったときでは、たことでした。これはエラーまたはテストの失敗を引き起こすと思いますが、違います。そのクラスのユニットテストは完全に無視され、存在しないかのように動作しました。

VS.NETテストの実行を確認して失敗し、Task戻り値の型を追加するのを忘れたのは、約3回のクリーンアンドビルド+再起動後ではありません。

public async Task This_IsMy_UnitTest()

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


私のために問題を解決しました!
Aimal Khan

8

Nugetパッケージマネージャーに移動し、次のようにNunitアダプターをダウンロードします。

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


ありがとう、私の場合、NUnit3TestAdapterの代わりにNUnitTestAdapterがありました。それで問題は解決しました。
pixel

NUnit3TestAdapter nugetパッケージをソリューションまたはプロジェクトに追加しても、他のすべてのソリューションの問題は解決されず、追加されたソリューションのみが解決されます。すべてのソリューション/ projsため、一般的にそれを行うためには、で説明したように、あなたのVisual StudioにNUnitの3テストアダプタの拡張子を追加stackoverflow.com/a/45748818/1300390
ウマルT.

6

私は同じ問題を抱えていましたが、フォルダー "%TEMP%\ VisualStudioTestExplorerExtensions"がマシンに存在しなかったため、投稿を読んで、作成するアイデアがあり、機能しました。テストエクスプローラーですべてのテストを表示できるようになりました。ありがとう。


6

ただ、再起動 Visual Studioとテストエクスプローラで「すべて実行」は...すべての私のテストは、その後発見されません。


1
また、テストエクスプローラーを閉じて再度開き、[すべて実行]を選択することもできます。いつもうまくいくかどうかはまだわかりませんが、今回はうまくいきました。
リッチ

5

私の場合(Visual Studio Enterprise 2015 14.0.25425.01 Update 3、Resharper 2016.2)、[ビルド]メニューからクリーンソリューションを実行する必要がありました。ソリューションを再構築すると、テストエクスプローラーが「ウェイクアップ」し、すべてのテストを再び見つけます。


5

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

「拡張機能とアップデート」は「ツール」メニューの下にあります


あなたの答えはどのように質問に価値を加えますか?読みましたか?まったく同じソリューションを推奨する回答がすでに2つあります。stackoverflow.com / a / 41364951
Alex

2
まあ、私は最初のものを読みました(つまり、stackoverflow.com / a / 41364951/6305294)が、それは私の答えとは異なります。それは、ソリューションまたはプロジェクトにNUnitアダプタnugetパッケージを追加することを提案しているためです。一般的に他のすべてのソリューションの問題。2つ目については、見逃したことは認めざるを得ません。おそらく、スクリーンショットを追加すると、質問に2つの多くの回答が存在するときに目を引くのに役立ちます
Umar T.

4

私の場合、問題は「椅子とキーボードの間」でした。ビルド時に単体テストプロジェクトを含まない構成マネージャーの構成に切り替えました。すべてのプロジェクトを含む構成(デバッグなど)に切り替えると、問題が修正されました。


4

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


4

これはおそらくほとんどの人には役に立たないでしょうが、ユニットテストに不慣れな人が、次のbool代わりに返されるテストメソッドを書いていましたvoid

[TestMethod]
public bool TestSomething()

戻り値の型を変更しvoidて問題を修正しました。


型を返すとテストの発見が妨げられることを知ってなおも興味深いが、私はそれを知らなかった。
Fred Kleuver 2016年

3

あなたが持っていることを確認してください xunit.runner.visualstudioテストプロジェクトpackages.configにパッケージがあり、正しく復元され。

これは元の質問の場合とは異なりましたが、私のような人のために時間を節約することができました。


3

上記のソリューションとはまったく異なるソリューションを見つけたと付け加えたいと思います。

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

[TestClass]
class ClassificationTests
{
   //unit tests
}

publicクラスに修飾子を追加するとすぐに、期待どおりに動作しました!


2

.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パッケージを使用していますか?
  • NuGetパッケージのバージョン3.8.0以降を使用していますか?
  • テストは.NET Coreまたは完全な.NET Frameworkを対象としていますか?(上記を参照)
  • Microsoft.NET.Test.Sdkにパッケージ参照を追加しましたか?
  • Visual Studioを再起動しましたか?それはまだ少し暫定的です。

出典:NUnit GitHub Wiki



1

私も同じ問題を抱えていました。プロジェクトをクリーンアップして再構築したところ、不足しているテストを確認できました。


1

私のソリューションを共有するために立ち寄ります。私はWindows 10、Visual Studio 2015、NUnit 3.5、NUnit Test Adapter 3.6(VISX拡張ではなくNuGetを介して)を使用していて、テストがまったく検出されませんでした。私の問題は、私のソリューションのTestsプロジェクトで、「Documents」フォルダーへのショートカットがプロジェクトフォルダー内に作成されていたことです。テストアダプターにショートカットが表示されていて、何をすべきかを理解しようとしてハングアップし、ユニットテストの表示に失敗したと思います。


1

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


1

このトピックはやや古くなっていますが、VS2015で不足しているテストステータスに対する私の解決策:

タスクステータスは、デバッグビルド構成でのみ表示されます。もちろん、これにより、テストエクスプローラーでテストをデバッグすることもできなくなります。


1

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

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


1

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


1

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

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

1

次のように問題を修正するのはとても簡単でした。

  • 単体テストプロジェクトを選択します
  • ソリューションエクスプローラーで[すべてのファイルを表示]ボタンをクリックすると、ソリューションエクスプローラーのファイルツリーのobj \ x86 \ Debugに新しい一時ファイルが表示されます。
  • これらの一時ファイルを削除して、プロジェクトを再ビルドします。
  • テストを実行して再試行しました。

1

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

Resharperのテストの発見はうまくいきましたが、VS Test Explorerは惨めに失敗しました。

プロジェクトにはMsTest TestFrameworkとTestAdapterの同じバージョンがなく、NuGetsを使用することもあれば、古き良きリファレンスを使用することもあります。これは明らかにサポートされていません(そのような高価なIDEの場合はそうです)。

すべてのMicrosoft.VisualStudio.Test *参照削除してから、2つのMSTest NuGetを追加/更新すると、問題が修正されました。


1

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.