編集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.0
、4.5.2
および4.6
で発生します。
私は以下のテストフレームワークを試してみましたが、それらすべてが同じ振る舞いをします。
Microsoft.VisualStudio.QualityTools.UnitTestFramework v14.0.22609.0
xunit v2.1.0-beta1-build2945
とxunit.runner.visualstudio v2.1.0-beta1-build1051
NUnit v2.6.4
とNUnitTestAdapter 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にはそれらの多くがあり、それらすべてを不要な副作用なしに削除できるわけではないことを私は知っています。
この問題は今もなお返ってきます。私は私のために関連する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"
を省略するだけです。
問題は、Visual Studio関連の一時/キャッシュフォルダを徹底的にクリーニングした後で「解決」しました。
すべてを1つずつ調べて、その間にテストする時間がなかったので、残念ながら、どれが実際に問題を引き起こしたのかわかりません。
これらは私が取った正確なステップです:
temp
ファイル/フォルダをクリアするためにCCleanerを使いました次のファイル/フォルダを手動で消去/削除します。
%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
驚いたことに、%TEMP%
ディレクトリにある一時ファイルをクリアすることで問題は解決しました。
注:このパスは通常C:\Users\(yourusername)\AppData\Local\Temp
にあります。
@ Warren-Pに含まれているように、スタートメニューに%temp%
を入力するか、または "File Explorer"を起動してアドレスバーに%temp%
を入力することでtempフォルダに移動できます。
コードがx64でコンパイルされているため、デフォルトプロセッサアーキテクチャをX64として有効にする必要があります。
Test > Test Settings > Default Processor Architecture > X64
NUnit Test Adapter 2/3がVisualStudioにインストールされている場合は、チェックアウトしてください。(Tools>Extensions and Updates )
正しいプロセッサアーキテクチャが選択されていることを確認してください。(Test>Test Settings>Default Processor Architecture)
この問題の1つの理由はあなたのテストクラスが一般に公開されていないことです。 MSTestはパブリッククラスからのテストのみを検出します。
Visual Studio 2015(Update 3)でテストエクスプローラにテストを添付したい場合は、NUnitテストアダプタをインストールする必要があります。 [ツール] - > [拡張機能と更新プログラム] - > [オンライン]タブ(アダプタを検索する必要があります) - > [ダウンロード]。 Visual Studioを再起動すると、テストフレームワークの変更を確認できます。
私はこれに対する完全な答えを持っていません、しかし私はテストプロジェクトで遊ぶことによっていくつかのことを決めました:
xunit.runner.aspnet : 2.0.0-aspnet-beta4
は、Visual Studioでは機能しません。"xunit": "2.1.0-*"
および"xunit-runner.dnx": "2.1.0-*"
パッケージを使用しても、Visual Studioで機能します。これは、デイリーではなく、ベータ4リリースを使用して、VS 2015 CTP 6に準拠したものです。
次のようにいくつかのテストが選択されなかったasync
というインスタンスがありました。
public async void This_IsMy_UnitTest()
問題は、Task
ではなくvoid
を返すようにするのを忘れたことです。私が切り替えをしたとき。これはエラーやテストの失敗の原因になると思いますが、それは不可能です。そのクラスの単体テストは完全に無視され、存在しないように動作しました。
テスト実行を見て失敗したのは、3回クリーンアップしてVS.NET
を再構築した後ではなく、Task
戻り型を追加するのを忘れたためです。
public async Task This_IsMy_UnitTest()
更新後、単体テストが見つかり、正しく機能しました。これはEdgeのケースかもしれませんが、内部でasync
を使用するためのawait
テストを使用していても署名が正しくない場合、これと同じ問題が発生する可能性があります。
ただ再起動Visual StudioとTest Explorerで "Run All"を実行してください...それから私のテストはすべて発見されます。
私は同じ代名詞を持っていましたが、私がそれを作成するという考えを持っていたので、私はそれを作成するという考えを持っていたので、フォルダー "%TEMP%\ VisualStudioTestExplorerExtensions"は私のマシンに存在しませんでした。テストエクスプローラは今私のすべてのテストを表示することができます。ありがとう。
私の場合(Visual Studio Enterprise 2015 14.0.25425.01 Update 3、Resharper 2016.2)、[ビルド]メニューからクリーンな解決方法を実行するだけで済みました。ソリューションを再構築すると、テストエクスプローラは「起動」し、すべてのテストをもう一度見つけます。
これはたいていの人には役に立たないでしょうが、単体テストに不慣れな人がbool
の代わりにvoid
を返すテストメソッドを書いていました:
[TestMethod]
public bool TestSomething()
戻り値の型をvoid
に変更すると問題が解決しました。
私の場合、VS 2015の下のMSTestは、174文字を超えるテスト(メソッド)名を持つテストを無視していました。名前を短くするとテストが見えるようになりました。これはテスト名を操作することによる推測とチェックによって決定されました。
私の場合、問題は「椅子とキーボードの間」でした。私は、ビルド時に自分の単体テストプロジェクトを含まないConfiguration Managerの設定に切り替えました。すべてのプロジェクトを含む設定(デバッグなど)に戻すと問題が解決しました。
テストプロジェクトpackages.configにxunit.runner.visualstudio
パッケージがあり、それが正しく復元されたことを確認します。
私はこれが最初の質問の場合ではないことを知っていますが、それは私のような人のために時間を節約することができます。
私は上記のものとは全く異なる解決策を見つけたことを付け加えたいと思います。
テストクラスを以下のように宣言しました。
[TestClass]
class ClassificationTests
{
//unit tests
}
クラスにpublic
修飾子を追加するとすぐに、それは期待どおりに機能しました。
.NET Standardまたは.NET Coreをターゲットにしている場合は、NUnit Test AdapterにはNuGetパッケージを使用し、拡張子ではない _を使用する必要があります。
.NET Coreまたは.NET Standardプロジェクトをテストしている場合は、NuGetからアダプタをインストールすることをお勧めします。 VSIXパッケージは複数のプラットフォームをターゲットにできないため、VSIXアダプタは.NET Coreをサポートしていません。
。
また、FAQも確認してください。
私のテストはVisual Studio 2017では表示されません?
- NuGetパッケージを使っていますか?
- バージョン3.8.0以降のNuGetパッケージを使用していますか?
- テストは.NET Coreまたは完全な.NET Frameworkのどちらを対象としていますか? (上記を参照)
- あなたはMicrosoft.NET.Test.Sdkへのパッケージ参照を追加しましたか?
- Visual Studioを再起動しましたか?それはまだ少し気まぐれです。
どういうわけか私のプロジェクトは静的ライブラリ(.lib)としてコンパイルするように設定されていました。これを動的ライブラリ(.dll)に変更した後、Visual Studio 2012によって正しく検出された場所でテストします。
My Unit Test Project ->
Properties ->
Configuration Properties ->
General ->
Configuration Type
私はこの素晴らしい小さな機能にも噛まれていて、ここで説明されているものは何も私のために働かなかった。私がビルド出力を再確認して、関連するプロジェクトがビルドされていないことに気付くまでは、そうではありませんでした。構成マネージャを訪問したことで、私の疑いが裏付けられました。
Visual Studio 2015では、私は新しいプロジェクトを追加することができましたが、それらを構築する価値はないと判断しました。プロジェクトをビルドに追加すると、うまく機能し始めました。
ファイル\ AppData\Local\Microsoft\VisualStudio\14.0\1033\SpecificFold erCache.xmlを削除すると問題が解決しました。
私がこの問題を修正するのはとても簡単でした。
X64を次のように変更して解決しました。プロジェクトを右クリック - >プロパティ - >ビルド - >プラットフォームターゲット - > Any CPU
私の解決策を共有するために飛び込む。私はWindows 10、Visual Studio 2015、NUnit 3.5、NUnit Test Adapter 3.6(NuGet経由で、VISXの拡張機能ではありません)を使っていましたが、私のテストはどれも発見されませんでした。私の問題は、私のソリューションのTestsプロジェクトで、どういうわけか私の "Documents"フォルダへのショートカットがプロジェクトフォルダ内に作成されていたことでした。私はテストアダプタがショートカットを見てそれをどうするかを考え出そうとしてハングアップしていたのではないかと思い、ユニットテストを表示できませんでした。
私のテストプロジェクトがapp.config
を含んでいたので、これは私に起こりました。それはアセンブリリダイレクトのためにNuGetパッケージによって自動的に追加されました、しかし私のテストはそれなしでうまく動くようでした。
https://developercommunity.visualstudio.com/comments/42858/view.html を参照してください。
同じ問題がありました。複数のC#プロジェクトとさらに多くのテストプロジェクトを含む、大きなVS 2015ソリューションがあります。
Resharperのテストディスカバリはうまくいったが、VS Test Explorerはひどく失敗した。
プロジェクトが同じバージョンのMsTest TestFrameworkとTestAdapterを持っていなかったこと、そして時々彼らはNuGetsや他の時代の古き良き参照を使っていたことが判明しました。
すべてのMicrosoft.VisualStudio.Test *参照を削除してから2つのMSTest NuGetsを追加/更新すると、問題は解決しました。
私は自分のテストプロジェクトのターゲットフレームワークがテスト中のプロジェクトとは異なることを認識することでこの問題を解決しました。はい、ターゲットフレームワークをデフォルト(Project> Properties> Application)から変更することでこの問題を引き起こしましたが、数週間後に作成されたテストプロジェクトではこれに失敗しました。不一致によってコンパイラエラーが発生することはありませんでしたが、エラーリストウィンドウに警告が表示されました。警告を表示するオプションを選択すると、解決策は明らかになりました。
Windows Defender Serviceを無効にします。これを直ちにオフにすると、私のすべてのユニットテストがTest Explorerに表示されました。
[TestClass]
属性を持つクラスが public であり、 private でないことを確認してください。
私は同じ問題を抱えていました。 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;
非常に奇妙な振る舞いですが、それが私の場合の問題の原因でした。
私は同じ問題を抱えていました。私はプロジェクトをきれいにして再構築したところ、不足していたテストを見ることができました。
VS出力ペイン(テストビューに切り替え)には、次のエラーがありました。
ファイルまたはアセンブリ 'XXX.UnitTest、バージョン= 9.4.0.0、カルチャ=ニュートラル、PublicKeyToken = 14345dd3754e3918'、またはその依存関係の1つをロードできませんでした。厳密な名前検証に失敗しました。 (HRESULTからの例外:0x8013141A)
テストプロジェクトのプロジェクト設定の[署名]タブで、誰かが[アセンブリに署名]をオンにしました。チェックを外してビルドするとテストが表示されました。
同僚もこの投稿からレジストリにキーを追加することで同じ問題を解決しました:
テストが見つからない可能性があるもう1つの理由を付け加えたいと思います。私の場合は、見つからなかったC++単体テストに関するものです。
私の場合、出力ディレクトリがプロジェクトディレクトリ内に含まれていなかったため、特定のプロジェクトのテストが見つかりませんでした。これを変更すると、確実にテストが見つかりました。
このトピックはやや古くなっていますが、VS2015で欠けているテストステータスに対する私の解決策は以下のとおりです。
Task-statusはDebug buildconfigurationにのみ表示されます。もちろん、これはまたテストエクスプローラを通してあなたのテストをデバッグすることを不可能にします。
私のために働いた唯一のものは次のとおりでした:C:\ Users(yourusername)\ AppData\Local\Tempを削除します。
他の提案は通常有効です。しかし、何らかの理由で、VSがあなたの変更を拾わずに出力に吠え続けているのであれば、テストを見つけることができないので、このディレクトリを掃除することがトリックをすることができます。そして、はい、それはあなたが立ち上げたばかりの "いつか"であり、あなたの解決策のどれももはやうまくいかないかもしれません、 "昨日"がすべてうまくいった場合。
私はVSTestフレームワークと私のネイティブユニットテストのために同じ問題に苦しんでいました。
そのため、前述のことをすべて実行した後、私は自分のソリューションのディレクトリパスにある '#'記号をすべて削除しました。それは実際にうまくいきます。
私は将来この質問を見つけるグーグルのためにここにそれを残しています。
テストメソッドにパラメータがないことを確認してください。これはあなたのテストが現れないもう一つの方法です。
エラーや警告はありません。
非同期メソッドを作成してもvoidを返すのを間違えました。
変更:public async void Test()
public async Task Test()
へ