Visual Studio 2013が単体テストを検出しない


146

Visual Studio 2013には、1つのWebプロジェクト、1つのライブラリプロジェクト、および1つの単体テストプロジェクトで構成されるシンプルなソリューションがあります。ソリューションを開いて単体テストを実行しようとすると、Visual Studioで検出されません。テストを実行するには、メニューに移動して、[テスト]-> [実行]-> [すべてのテストを実行]を選択するか、テストエクスプローラーウィンドウを開きます。これらの方法により、ビジュアルスタジオはソリューション内のテストを検出しません。

最初に単純な単体テストプロジェクトを作成してテストを実行しようとすると、Visual Studioはテストを発見し、実行できます。次に、以前のソリューションを開くと、ビジュアルスタジオがすべてのテストを検出します。ソリューションを保存しようとしましたが、最初に単体テストプロジェクトを作成せずにソリューションを閉じて再度開いた場合、Visual Studioはテストを再度検出しません。これは非常に奇妙な動作で、なぜこれが起こっているのかわかりません。

Visual Studioチームの基盤と統合されたソース管理gitを使用していたこのプロジェクトで、私は一人で働いていました。ビジュアルスタジオがユニットテストを検出しないという問題は、新しい要素がプロジェクトに到達したとき、およびソース管理オンラインでソリューションを再作成する必要があるときに始まります。これ以前は、すべてのテストは常にVisual Studioによって発見されていました。

ユニットテストの作成には、Microsoft.VisualStudio.QualityTools.UnitTestFramework dllを使用します。Visual Studioの私のバージョンは次のとおりです。MicrosoftVisual Studio Express 2013 for Webバージョン12.0.30723.00 Update3。.netフレームワークのバージョンは4.5.50938です。

私のテストはすべて次のとおりです:

[TestClass] 
public class Service1Test 
{ 
    [TestMethod] 
    public void Test1() 
    {
        Assert.IsTrue(True); 
    } 
}

2
これらは非同期ベースの単体テストですか?
ジェイミーキーリング2014

問題が何であるかはわかりませんが、管理者として実行すると問題が解決しました。
Sriram Sakthivel 2014

すべての同期ベースのユニットテスト
miguelbgouveia 2014

2
外部のテストランナー(ReSharpersやNCrunchなど)を試しましたか?インストールにバグがある可能性があります(VSを再インストールしてください)
Carsten

1
これらのどれも私のための問題を修正しませんでした:(なんて悲惨なことです。私はNUnitをあきらめ、UnitTestFrameworkに依存しています-奇妙なことに、OPからの反対の問題
Adam

回答:


210

テストを適切に表示するために時々しなければならないことに気付いたいくつかのこと。

  1. ソリューションが保護されたドライブにあり、読み取り/書き込みのために管理者アクセスが必要な場合、テストの一部のみが表示されることがあります。その場合は、必ず管理者としてVSを実行してください。

  2. ソリューションが64ビットの場合は、[テスト]> [テスト設定]> [デフォルトのプロセッサアーキテクチャ]がx64に設定されていることを確認してください。時にはx86に設定されます。x64に設定してから、再構築します。

  3. テストエクスプローラーが再び起動するため、Visual Studioを再起動するだけでうまくいく場合があります。

  4. 実際にテストプロジェクト/ソリューションをビルドすることを忘れないでください。(残りのプロジェクトでビルドする場合は、ソリューションを右クリックして、[プロパティ]> [構成プロパティ]> [構成]を選択し、テストプロジェクトの[ビルド]ボックスをオンにします)

  5. テストがpublicテストクラスのセクションにあることを確認します。


34
この回答は少し遅れていることに気づきましたが、私のGoogle検索でここにたどり着きました。結局私はそれが私のリストの中で2番目であることがわかったので、その知識と、時間の経過とともに選択した他のトリックを残したいと思いました。
AndyG 2015年

7
#2と#3の組み合わせでうまくいきました。Visual Studioは、x86用にビルドされたため、ソリューション内のいくつかの(非テスト)プロジェクトがテスト検出ステップから除外されていると不満を述べましたが、問題ありませんでした。
Nate Barbettini、2015

4
設定がすべて正しく、再起動が機能しないことがわかりました。私にとって問題を解決したのは、単にソリューションを構築することでした。これは馬鹿げているように見えるかもしれませんが、必要なことは明らかではありません。この手順について言及している公式ドキュメントはありません。
user1807768 2015

6
VS2015でも同じ問題が発生しました。#2で問題が解決しました。
mcolegro 2015年

2
私はなぜ人々がそんなに頻繁に失敗する製品にそんなにお金を払うのかわからない。プロジェクトを2015年にアップグレードして、テストが見つかるまでに#3を2回実行する必要がありました。
マシュー・ホガン

81

NUnitを使用している場合は、まずNUnitアダプターをダウンロードしてください。

ツール→拡張機能とアップデート…→オンライン→「NUnitテストアダプター」を検索してください。


2
MicrosoftのUnitTestsを使用しています。この場合、何もインストールする必要がないと思います。
miguelbgouveia 2015年

1
これは私のためにそれをしました-多くの義務があります。
Matas Vaitkevicius

これで解決しました。ありがとう。
jjthebig1 2017

問題を解決したのと同じように賛成ですが、NUnitアダプターが必要ですか、それともVisual Stdioがそのままの状態でNUnitで動作する必要がありますか。
OwainGlyndŵr2017年

あなたは神様です。
Nox

61

テストクラスがpublic見つかるようにしてください。また、別のクラスを参照している場合は、同じことを確認してください。

また、アサートがない場合や、テストをで修飾していない[TestMethod]場合、テストが認識されないことがあります。

さらに2つ:1)非同期ユニットテストは、最高の状態で面白い動作をし、最悪の場合はまったく動作しません。見て、この記事ステファン・クリアリーを、それはあなたが興味のある場合は、そこから続けます。

2)NUnitを使用していて、同じ問題が発生した場合は、 [TestCase]のではなく、NUnitのために[TestMethod]

上記を踏まえて、コードプロジェクトに投稿した記事に、MSTest&を付けて、少しNUnit見逃したくない場合に備えます。


1
私のテストはすべて次のようになります。[TestClass] public class ServicesUtilsTest {[TestMethod] public void Test1(){Assert.IsTrue(True); }}
miguelbgouveia 2014

これはあまり明確ではありません。それを質問のコードブロックに入れて、理解できるようにします。:)
Noctis

私のテストはすべて同期コードに関するものであり、私の問題は単体テストコードではなく、ビジュアルスタジオではテストが見つからないことがあると思います。
miguelbgouveia 2014

代わりにこれを使用してみてください:using Microsoft.VisualStudio.TestTools.UnitTesting;
Noctis

1
既にMicrosoft.VisualStudio.TestTools.UnitTestingを使用しています。この名前空間はdll Microsoft.VisualStudio.QualityTools.UnitTestFramework.dllで定義されています
miguelbgouveia

28

私は同じ問題を抱えていましたが、他の解決策はどれもうまくいきませんでした。NUnit 3フレームワークと2アダプターを使用していたことがわかりました。

NUnit 3を使用している場合は、拡張機能と更新に移動し、NUnit3テストアダプターをインストールします。


これはNugetパッケージの説明でこれを述べています。しかし、あなたが私のようで、読んでいない場合は、これが役立つことを願っています。「このパッケージには、テストで参照されるNUnit 3.0フレームワークアセンブリが含まれています。nunit-のバージョン3.0をインストールする必要があります。テストを実行するためにNUnit 3.0をサポートするコンソールプログラムまたはサードパーティランナー。NUnit2.xでの使用を目的としたランナーは、3.0テストを正しく実行しません。」
フランク

私の場合、NUnit3の更新と関係があることはわかっていましたが、私のテストの1つのセットはパスし、他のセットは表示されませんでした。詳細に調べたところ、すべてのテストに合格したにもかかわらず、出力には多くの例外がありました。
リッチシーラー、2015年

私もそうでした。NUnit 2.xから3.xに更新されたことに気付かずにnuget "update-package"を実行しました。
Jens

現在、NUnit 3.0テストアダプターはNuGetでは見つかりません(NUnit 3.0 Wikiを参照)。拡張機能としてインストールすることもできます。
vauhochzett 2016年

1
フランク、どうもありがとう。それは私の問題を解決しました。これで、単体テストの結果をコンソールウィンドウに表示できます:)
santosh kumar patro

12

私は時々この問題を抱えています。私にとってうまくいくのは、Visual Studioをシャットダウンしてフォルダーに移動することです。

%LocalAppData%\Microsoft\VisualStudio\12.0\ComponentModelCache

コンテンツを削除します。

Visual Studioを開いてプロジェクトを再度読み込むと、テストエクスプローラーにテストが含まれているはずです。


私にとってはそれはうまくいきません。最近Visual Studio 2013 ExpressとUpdate 5のインストールを使用しています。まだユニットテストは表示されません。
miguelbgouveia 2015

これは私にとっても働き者でした。ビジュアルスタジオを再起動することなく動作しました。排水管を下る時間がようやく終わりました。
Stephan Ryer 2017年

このディレクトリはVS2017には存在しません。
Noel Widmer 2017年

おかげで私にとってはこのフォルダーのバージョンが異なる場合があります。これは、私のようにビジュアルスタジオのインストールに応じて異なるバージョンになる可能性があります%LocalAppData%\Microsoft\VisualStudio\16.0_03b7a93c\ComponentModelCache
Ravi Kumar Mistry

12

XUnitユーザーは、テストエクスプローラーウィンドウにテストがリストされなくなったことに気付く場合があります。テストを再度検出可能にするには、以下で強調表示されているこの重要なヒントを試してください。

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

TEMPと入力して、ターゲットフォルダーを検索します


これは私にはうまくいきませんでした。テストエクスプローラーは私のテストを見つけられないだけであり、私が知る限り、私はそれを間違って行っていません。ここでいくつかの解決策を試みましたが、成功しませんでした。
Skychan 2017年

MsTestV2の使用-これが問題を修正した唯一の方法でした
Nathan

5

将来のグーグルにとっては、これを引き起こすまれなシナリオがありました。

ベーステストクラスには、TestContextという名前のプロパティがありました。これはMSTestの予約済みTestContextプロパティに干渉し、1つを除いてすべてのテストがVS / Resharperから隠されました(ベースから継承しませんでした)。


1
私も手に入れました!テストコンテキストプロパティを作成するのを忘れましたpublic
escape-llc

4

私にとっては、「ソリューション構成」を(リリースではなく)デバッグに変更していました。


4

私の問題は、ユニットテストメソッドがvoidではなく、パラメーターを受け取っていたためです。


すべてのもののうち....これは私の問題であり、paramsビットは理にかなっています。結局のところ、テストシステムは合格するために何を知っているでしょうか。解決策は、テストするメソッドを手動で呼び出すテストメソッドを作成することです。WebAPIプロジェクトをテストしていて、Get with paramsがある場合でも、対応するGet呼び出しが必要ですが、Explorerには表示されません。
MetalPhoenix 2016年

4

async voidVS Test Explorerによって検出されないものとしてマークされた単体テストメソッドが見つかりました。これは、VSがテストの終了を待ち、成功したかどうかを判断する方法がないためと考えられます。非同期で実行するテストメソッドが絶対に必要な場合は、のようにタスクを返すようにしてくださいasync Task。これで問題が解決したことがわかりました。


1
これは上記の質問には答えませんが、これはまさに私が解決しようとしていた問題です。だからあなたは事故+1を得ました:)どうもありがとう!
CF

3

すべてのプロジェクトをx86 / x64ではなくMSIL(Any CPU)としてビルドしてみてください。奇妙に働いた


Any CPUを使用してテストプロジェクトをビルドするだけで、他のプロジェクトはx64のままでした
Eduardo Brites

1
技術的には、C#/ VB.NETは常にMSILにコンパイルされます。プロジェクト設定 "x86"、 "x64"、または "Any CPU"(および新しいバージョンでは "Prefer 32-bit")は、EXE / DLLの上部にあるフラグです。ただし、ポイントはまだ残っています。特定のアーキテクチャーを実行する必要があるとマークされているため、NUnitは実行エンジンにロードできないテストをリストしません。
ジョナサンギルバート

3

AndyGのソリューションは機能しますが、より永続的なソリューションは、PreferredToolArchitecture環境変数を「x64」に設定することです。

Visual Studioにネイティブのamd64ツールチェーンを使用させる方法

または:

  • コントロールパネル| システムとセキュリティ| システム| 高度なシステム設定|環境変数
  • PreferredToolArchitecture = x64
  • DefaultToolArchitecture = Native64Bit
  • PROCESSOR_ARCHITECTURE = x64
  • ProcessorArchitecture = x64

2

私は同じ問題に直面していましたが、ソリューションプラットフォームメニューで[混合プラットフォーム]を選択すると、他の回答も機能することを思い出しました(この状況は以前にもありました)。


しかし、ソリューションプラットフォームメニューはどこにありますか?それはVisual Studioにありますか?Visual Studio Express 2013 for Webを使用していますが、そのメニューが見つかりません。
miguelbgouveia 2015



1

プロジェクトメニュー> Configuration Managerに移動して、テストプロジェクトプラットフォームがプロジェクトの残りの部分と一致していることを確認し、ビルドしてから再ビルドすることを確認します。


1
プロジェクトメニューにConfiguration Managerオプションがありません。プロジェクトのプロパティオプションしか見つかりません。私は単体テストプロジェクトのプラットフォームそのものであり、他のプロジェクトと同じです。したがって、私にとって、このソリューションは機能しません。
miguelbgouveia 2015

「プロジェクトの残りの部分に一致する」を定義する
アマルガメート2015年

1

これに遭遇しただけでなく、私と同じようなケースは見当たりませんでした。

.csproj、私のテストプロジェクトのファイル、NUnitの参照のプライバシーをに設定しましたFalse

<Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
  <HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
  <Private>False</Private>
</Reference>

私が設定<Private>した後、Trueそれは機能しました。


1

このパッケージのみをインストールする必要があります:

NUnit TestAdapter NUnit TestAdapter


別の単体テストフレームワークを使用すると問題が解決することを知っています。しかし、Microsoftユニットテストフレームワークを引き続き使用したい場合、それは解決策ではありません。
miguelbgouveia

1

テストをテストエクスプローラーウィンドウに表示するには、パッケージマネージャーでは利用できないNUnit3テストアダプター3.0をインストールする必要がありました。

https://visualstudiogallery.msdn.microsoft.com/0da0f6bd-9bb6-4ae3-87a8-537788622f2dからダウンロード


MicrosoftのUnitTestsを使用しています。この場合、何もインストールする必要がないと思います。
miguelbgouveia 2016

1

私はまったく同じ問題を抱えていました。

これは、プロジェクトに追加した互換性のないバージョンのNUnit(3.2.0)と、インストールしたテストアダプター(2.0.0)が原因でした。

修正するには、「ツール>拡張機能と更新」を使用してNUnit3テストアダプターを検索します。その後、テストが検出されました。

乾杯


NUnitを使用していません。
miguelbgouveia 2016年

1

(私の場合のように)依存関係が適切に構築されるようにするには、テストプロジェクトでX64アーキテクチャを使用する必要があることを議論のためにだけ言いましょう。[テスト-テスト設定]メニューでデフォルトのプロセッサアーキテクチャを変更する必要がある場合があります。これをX64に設定すると、テストエクスプローラーはMicrosoft.VisualStudio.TestTools.UnitTestingを使用してテストを見つけることができます。


1

長いリストに追加して申し訳ありませんが、まったく別の問題がありました。まず、テストエクスプローラーで[すべて実行]をクリックし、Visual Studioでビルド出力ウィンドウを見ているときに問題が見つかったことを述べておきます。その後メッセージが消えるので、それを積極的に監視する必要があります。

問題に関しては、テストのスキャン中にDLLが読み込まれ、そのテストタイプが列挙されたようです。これにより参照がロードされ、このプロセス中にエラーが発生した場合、エクスプローラーにテストは表示されません。テストDLLを正常にロードできない2つの問題がありました。

  • 設定ファイルに残っているバインディングリダイレクトがまだありました(テストプロジェクトで参照されていたバージョンよりも低いバージョンのNHiberateにリダイレクトしています)。
  • 競合するアセンブリ参照(第2レベルの参照を読み込めない)。AsmSpyは、これらを探すための優れたツールです。

私は同じ問題に直面していて、
どのdllが

1

ネットワーク共有または共有の一部であるマイドキュメントディレクトリからVisual Studio(私の場合はVS 2015コミュニティ)ソリューションをロードすると、この問題が発生します。ソリューションとその基礎となるプロジェクトをローカルフォルダーに移動することで解決しました。


1

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

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

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


0

私は同じ問題に出くわしました。調査したところ、DLLがビルドされておらず、正しいフォルダに配置されていませんでした。設定を変更するとすぐに表示されました。-プロジェクトのビルドオプション、どのフォルダーを使用する必要がありますか?-ビルドメニューエントリのビルド構成。チェックする必要があります。

それは私のためにそれを修正しました。


私にとって、Visual Studioが定義済みのテストを見つけられないため、テスト用のDLLもビルドされませんでした。Visual Studio Expressを使用していますが、[ビルド]メニューエントリがありません。しかし、私の構成マネージャーでは、すべてのビルドオプションがチェックされています。だから、私の場合は問題ないと思います。
miguelbgouveia

@miguelbgouveia、それは逆です-VSはDLLを構築し、テストのためにそれらをスキャンします。したがって、テストプロジェクトDLLがない場合、テストは確実に見つかりません。

0

Visual Studio 2013.5の場合、ソリューションの\ TestResultsディレクトリをクリアすると役立ちました。Visual Studioにより、検出されたテストが格納されているmdfファイルが破損し、ユニットテストの検出が妨げられました。


1
それはあなたのプロジェクトのソリューションにあります。ソリューションエクスプローラーでプロジェクトファイルを右クリックし、ファイルエクスプローラーでフォルダーを開きます。そこから1つ上のディレクトリに移動し、/ TestResultsディレクトリを削除します。すべてを削除するには、Visual Studioをシャットダウンする必要がある場合があります。次にプロジェクトを開いたときに、ディレクトリが再構築されます。
MartijnK 2016

0

すべてのプロジェクトが同じ構成で実行されていることを確認してください。プロジェクトのプロパティ=>デバッグ=>プラットフォームのドロップダウンリストで、他のプロジェクトで決定された適切なプラットフォーム(私にとっては「すべてのCPU」)を選択します。


0
  • ソリューションがビルドされていない場合は単体テストが見つからないので、それは試してみる必要があります(ソリューションのビルド)が、そのソリューションは、コンピューターが接続されているかどうかを尋ねるヘルプデスクのようなものです...
  • クリーンな再構築で問題が解決しなかった後、完全なバッチビルドを実行しても問題は解決しました。

0

同じ問題があった; テストが突然発見されなくなりました。

Nunit Test Adapterが何らかの理由で無効になりました。拡張機能マネージャーで「有効にする」をクリックすると、修正されました。


0

切り取り/貼り付けのエラーが発生し[Test Method]、テスト前に中断するまで、同じ問題が発生しました。


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