web-dev-qa-db-ja.com

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

私はそれをインストールして以来、VS 2017と格闘してきました。今ではユニットテストはコマンドライン "dotnet test"からのみ実行されるようです。

私のプロジェクトは.NET Core 1.1.1です。私はSDKと1.1.1用のフレームワークアップデートをインストールしました。

私はMSDN( https://msdn.Microsoft.com/ja-jp/library/ms182532.aspx )でサンプルを試しましたが、これもまったく同じ方法で失敗します。

テストとメインプロジェクトのためのすべてのNuGetパッケージは最新のものです。そしてテストプロジェクトとメインプロジェクトの両方がエラーなしでビルドされます。テストはコマンドラインから正常に実行されます。

誰かがVS 2017で単体テストを実行するようになったことがありますか?

ありがとう、ジョン


更新 - 拡張する

これは GitHub に取り組んでいない簡単なテストプロジェクトの例です。これはxUnitを使った例ですが、私はMSテストに組み込まれたNUnitとビジュアルスタジオを試しました。どんなテストやどんな変更を行っても、VSテストランナーにテストを見つけることができません。

私が試したこと

  • VSテストキャッシュファイルの削除DEL %TEMP%\VisualStudioTestExplorerExtensions
  • VSの再起動
  • テストエクスプローラを閉じる/開く
  • xUnitがインストールされている場合Microsoft.DotNet.InternalAbstractionsSO postを参照
  • nUnitの場合は、アダプタがインストールされ、NUnitパッケージと同じバージョン(3)であることを確認します。
  • test -> test settings -> default processor architectureはx86に設定されています

質問
誰もがVS2017で.Net Core 1.1.0ソリューションの実例(.csprojプロジェクトファイル)を提供できますか?ここでVSテストエクスプローラーが正常に単体テストを見つけます _または_ show me与えられた例の問題.

188
John Pezzanite

私の場合は、テストアダプタとテストフレームワークを単純に upgrade にするだけでした。完了しました。

NuGetパッケージマネージャの使用例

enter image description here

179

これはちょうど私のために働いた(それが何かを破損したワークスペースを変更した結果であるかどうかわからない):

%TEMP%\ VisualStudioTestExplorerExtensions内のVSテストキャッシュファイルを削除してVS2017を再起動します。

119
PmanAce

.NET Core用のテストアダプタのAPIは、Visual Studio 2017のリリースとproject.json形式からcsproj形式への移行に伴って変更されました。これにより、dotnet-test-*のような既存のdotnet-test-nunitアダプタは廃止されました。

アダプタは更新されましたが、Visual Studioまたはdotnet testを使用してコマンドラインでテストを設定および実行する方法には、テストプロジェクトで異なる参照が必要です。古くなっているのでdotnet-test-*フォーマットで参照パッケージを参照しているあなたが見つけるどんなドキュメントのBeware

まず、テスト対象のコードが.NET Standardであっても、テストプロジェクトは.NET Coreまたは.NET Frameworkのいずれかの特定のプラットフォームをターゲットにする必要があります。NETStandardをターゲットにすることはできません _これは、テストのターゲットがどのプラットフォームでテストを実行するかを示すためです。 .NET Standardは、多くのプラットフォームで実行できるという点でPCL(Portable Class Library)と似ています。

次に、あなたが選択したテストフレームワークと互換性のあるテストアダプタであるMicrosoft.NET.Test.Sdkへの参照を追加する必要があります。 NUnitの場合、参照は次のようになります。

<itemgroup>
    <packagereference Include="Microsoft.NET.Test.Sdk" Version="15.0.0"></packagereference>
    <packagereference Include="NUnit" Version="3.7.1"></packagereference>
    <packagereference Include="NUnit3TestAdapter" Version="3.8.0"></packagereference>
</itemgroup>

上記のコメントは追加を言及し、

<ItemGroup>
    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
</ItemGroup>

これは厳密には必要ではありませんが、助けることができます。 Visual Studioによってすべてのユニットテストプロジェクトに自動的に追加され、テストのあるプロジェクトをすばやく見つけることができます。

テストがVisual Studioに表示されない場合、最初に試すことはソリューションを閉じてからもう一度開くことです。編集時にプロジェクトへの変更を検出できないというVisual Studioのバグがあるようです。

詳細については、 Visual Studio 2017でのNUnitを使用した.NET Coreのテスト を参照してください。

55
Rob Prouse

私は同じ問題を抱えていて、次のようにすることによってそれを働かせました..:

  • 最初に開いているすべてのVisual Studioインスタンスを閉じて、次のフォルダを削除します:%TEMP%\ VisualStudioTestExplorerExtensions。( Visual Studioによるテストの実行
  • Nugetパッケージマネージャに行き、最初にMicrosoft.NET.Test.Sdk(15.3.0-preview-20170425-07)をインストールしてからxunit.runner.visualstudio(2.3.0-beta1-build1309)をインストールしてください。私のテストを検出するために最新のVS 2017を入手するために私がインストールしなければならなかったすべてのパッケージを見るために添付のNugetスクリーンショットを見てください ( Nuget Screenshot
37
Sanchal Kunnel

テストクラスをpublicにして、内部のテストメソッドが発見されないようにするのを忘れた

私はデフォルトのxUnitプロジェクトを持っていて、UnitTest1.csというサンプルを削除し、それをいくつかのテストでコントローラテストクラスに置き換えましたが、何も見つかりませんでした。

XUnit、Test.Sdk、xUnit.runnerの各パッケージを更新し、プロジェクトを再ビルドした後、長い間、ビルドエラーが発生しました。

エラーxUnit1000テストクラスはパブリックである必要があります

ありがたいことに、更新されたバージョンは私にいくつかの問題を解決するためにこの例外を投げました

テストクラスを公開するように修正して問題を修正しました

20
kidroca

私の場合、私はテストプロジェクトをx64 Architectureに設定し、テスト設定Architecture(test-> Default Processor Architecture)をx86に変更しました。彼らは一致しませんでした。

テスト設定Architectureをx64に戻して再構築した後、すべてのテストが再発見されました。

10
ByteArtisan

MSDNの下で古くなった記事を読んではいけません。 .NET Core関連資料はdocs.Microsoft.comにあります。

https://docs.Microsoft.com/ja-jp/dotnet/articles/core/testing/

一般的に言って、単体テストケースを含めるには.NET Coreコンソールアプリケーションが必要です。

6
Lex Li

私はVS 2017でも私のUnitTestを見つけるのに問題がありました。それはジョンが頼んでいたまさにその問題ではありませんでした - しかし、これは私が探していたグーグルでの最初の結果だったので、私は私の問題を共有したいと思いました。

VS2010からVS2013、VS2015に至るまで、レガシソリューションが戻ってきました。現在のVS2017では、[TestMethod]属性の名前空間が変更されたようです。

使用する前に

Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0

プロジェクトに新しいTest.dllを作成し、それをデフォルトで使用しました

Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0

だから私の解決策はVS2017内から新しいUnitTestプロジェクトを作成することでした。たぶん、古いテストプロジェクトのためにアセンブリ参照を変更することはうまくいったでしょう。新しい参照VS2017でそれらのユニットテストを発見しました。

6
hartmape

正しいMicrosoft.NET.Test.Sdkを使用していることを確認してください。

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />

プレリリース版を使用しないでください。またはコンソールアプリ(ライブラリではありません)に変更する必要があります。私は同様の問題を抱えています、しかし最新のリリース(15.0.0)でそれは再び働き始めます。

また、追加する必要があります。

  <ItemGroup>
    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
  </ItemGroup>

しかし私はそれが必要であるとは思わない。

5
Alex Altotsky

OPが彼のチェックリストにこれを記載していることは知っていますが、Visual Studio 2017のクリーンインストールを実行して新しいプロジェクトを設定しながら、その点を見落とすのは簡単です。 NUnitプロジェクトテンプレートとは別に および NUnitフレームワーク NUnitアダプタを個別にインストールする必要があります。 NuGetコマンドInstall-Package NUnit3TestAdapter -Version 3.9.0を使います。その後、Visual Studio Community 2017は問題なく単体テストを発見し始めました。

4
Marcin Tarsier

私にとっての問題は、私が誤ってテストケースを内部クラスに入れたことです

[TestClass]
  internal class TestLib {
}

それはテストケースが識別されていない原因でした。

3
TARJU

私の場合は、プロジェクトを新しいソリューションに移行した後、Test Explorerでテストを見つけることができませんでした。

答えは、私のプロジェクトで古いMS Test Adapterへの参照があったということです。

私のcs.projファイルには、バージョン1.1.11のMS Test Adapter用の以下の行が重複しています。

<Import Project="..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.props')" />

問題を解決するには

  1. プロジェクトを右クリックして「プロジェクトのアンロード」を選択します。
  2. プロジェクトを右クリックして編集を選択
  3. 古いバージョンのアダプタをインポートする行を削除します。
  4. プロジェクトを右クリックして[プロジェクトの再読み込み]を選択します。
  5. ソリューション/プロジェクトを再構築
3
jamo

発見

上記の一番上の答えは私にはうまくいきませんでした(再起動、バージョン1.1.18へのアップデート、私はすでにアップデートされました、一時ファイルの削除、NuGetキャッシュのクリアなど)。

私が発見したのは、異なるテストプロジェクトで、 MSTest.TestAdapter MSTest.Framework への参照が異なることです(私のソリューションには2つあります)。 1つは1.1.18のように指摘されました...

packages.config

<package id="MSTest.TestAdapter" version="1.1.18" targetFramework="net461" />
<package id="MSTest.TestFramework" version="1.1.18" targetFramework="net461" />

...しかし、他の人は1.1.11を参照しています。上記の回答の一部は、Visual Studioの再起動後に2つのバージョンのライブラリが私の一時ディレクトリ(%TEMP%\ VisualStudioTestExplorerExtensions \)に表示されたときにこの発見につながりました。

溶液

私のpackages.configを1.1.18バージョンに更新するだけで、VSの単体テスト機能が回復しました。 MSTestライブラリを並べて参照できないバグがいくつかあるようです。これがお役に立てば幸いです。

詳細情報:

  • Visual Studio 2017 Ent:15.5.6(この問題を解決することを期待して15.0.1から更新しましたが、両方に適用しました)
2
ebol2000

私の場合は、テストプロジェクトを以前の.NETバージョンからアップグレードしたプロジェクトでした。 app.configで私は従属アセンブリの以前のバージョンへのassemblybindingを持っていました。

App.configでassemblybindingsを修正した後、私のテストは発見されました。

2
Henrik Gering

Visual Studioが私のテストを見つけることができず、メソッド以外にそれらを実行するボタンが表示されず、プロジェクト内のすべてのテストを実行しても問題が解決されないという問題がありました。

私のテストクラスは一般公開されていませんでした。公開することでVSはテストを発見することができました。

2
dahui

私にとっては、Visual Studio 2017で完璧に機能する新しいテストプロジェクトを作成するのが簡単で、必要に応じてテストファイルをコピーし、参照を追加し、NuGetパッケージを追加するだけです。

enter image description here

2
Jaider

私の場合は、問題を引き起こしているソリューションにUWPプロジェクトが存在していました。

UWPプロジェクトをアンロードしたところ、テストが見つかりました。ロードし直すと、テストはまた消えます。

すべてのプロジェクトをアンロードし、テストプロジェクトだけを維持するようにしてください。 Test Runnerに10の再構築ソリューションとテストシャウンドが表示されます。プロジェクトを1つずつロードし、そのたびにソリューションを再構築して、どのプロジェクトが問題の原因となっているかを特定します。

サンプルリポジトリ

VSバグレポート

1
Liero

C++の場合

C++テストに関する特別な質問はありませんが、トピックはほとんど同じなので、テスト検出で問題が発生したときに役立ちました。

デスクトップ開発をC++ のみでインストールした場合、解決策は ユニバーサルWindowsプラットフォーム開発 /オプションの C++ユニバーサルWindowsプラットフォームツールを使用して をインストールすることです。これらはVisual Studio Webインストーラで選択できます。

その後、テストプロジェクトを再構築するとテストディスカバリはうまくいくはずです。

ところで、私はVS2017でユニットテストプロジェクトを作成しました。何人かのユーザーが、VS2015からVS2017に移行されたプロジェクトで発見問題があると述べたので、それは重要かもしれません。

1
feng

古い.dllを削除すると解決するはずです。 C:\ Users(yourusername)\ AppData\Local\Tempの%TEMP%ディレクトリにある一時ファイルの消去

1
Tanya Fomenko

私の場合、上記のどれも助けにはなりません。しかし、私はNUNit3TestAdapterをバージョン3.8.0にダウングレードしてから最新のバージョン(3.10.0)にアップグレードします。

1
vlatko606

私は同じ問題を抱えていました。私の解決策は問題ありませんでしたが、突然解決策を開くとテストが終わったことがわかりました。

最後に、Microsoft.VisualStudio.TestPlatform.TestFrameworkMicrosoft.VisualStudio.TestPlatform.TestFramework.Extensionsパッケージを(NuGetマネージャを使って)非常に古いバージョンにダウングレードし、テスト方法を示しました。それから私は最新バージョンにアップグレードしました、そしてまだそこにありました。

パッケージをダウングレードしてアップグレードするだけです。

1
FLICKER

解決策は、私のapp.configファイルを私のユニットテストプロジェクトから削除することでした。テストが再表示されます。

このファイルは実際にはプロジェクトの参照に存在していなかったbindingredirectsでいくつかのdllを参照しました。プロジェクトに厳密に必要なアセンブリバインディングを再追加します。

1
domenu

私はすべてを試したが何も助けなかった。私の場合は、いくつかのテストプロジェクトを含むソリューションを使用していましたが、そのうちのいくつかは古いms-testフレームワークを使用していたので、Visual Studioはそれらだけを見つけました。

受け入れられた答え に示されているように、私はすべてのテストプロジェクトのためのテストフレームワークパッケージをインストールしました。その後、古い品質ツールへの参照を削除し、Visual Studioを再起動すると、すべてのテストを見ることができます。

1
t3chb0t

私の場合、問題はプロジェクトの種類が静的ライブラリ(lib)に設定されていて、動的ライブラリ(dll)になっていることでした。

0
kjhf

NUnit 3テストアダプタが enabled になっているか確認してください。私の場合、私はずっと前にすでにそれをインストールしました、しかし突然それはどういうわけか無効になりました。私はその部分をチェックすることにした前に私はかなり時間がかかりました...

NUnit 3 Test Adapter Disabled

0
Tybs

テストの名前空間を変更するとうまくいくことがあります。私は以下のようなフォルダ構造を持っていました:

A |___B | |___D |___C___E

名前空間はTests。<name>のようにフラットであり、テストウィンドウに表示されませんでした。名前空間をディレクトリの構造に変更すると、すべてのテストが表示されました。今、私は私が欲しい他の名前空間構造に戻ることができました。

あなたのプロジェクトを構築することを忘れないでください!

0
Rohan

場合によっては、単体テストコードにstackoverflow例外があると、Visual Studioによってその単体テストケースが実行されていないとマークされ、それ以降の他のテストケースの実行が停止されます。

この場合は、どのケースでstackoverflow例外が発生しているのかを特定する必要があります。

0
Ike

プロジェクトのBINおよびOBJフォルダを削除しました。私がそうすると、すべてが正しく機能しました。

0
Ctznkane525

最初はMSTestを使おうとしました。その後、私はそれをNunitテストに変更します。それから私はMSTestをバックアップしたいと思いました。すべてのnUnitコードと参照を削除しましたが、Test ExplorerはMSTestメソッドを表示しませんでした。解決策:私はすべてのmstest nugetの参照を削除して再インストールしました。完了しました。

0
Oguzhan KIRCALI

私にとっては、テストプロジェクトの.csprojファイルのTargetFrameworkを

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

  <PropertyGroup>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>

働いた。

0
JDawg

.NET Frameworkの場合、テストプロジェクトには、以前は次のDLLへの参照がありました。

Microsoft.VisualStudio.TestPlatform.TestFramework
Microsoft.VisualStudio.TestPlatform.TestFramework.Extentions

私はそれらを削除し、以下への参照を追加しました:

Microsoft.VisualStudio.QualityTools.UnitTestFramework

そして、すべてのテストが表示され、以前と同じように機能し始めました。

上記の他の提案のほとんどすべてを試しましたが、テストDLLを再参照するだけで問題ありませんでした。私の場合はこの回答を投稿しました。

0
U.Savas

問題

問題は、Visual Studioがマシン上のdotnetコアバージョンと混同されることです。私がコントロールパネル - >プログラムのアンインストールに行ったとき、私は8つの異なるdotnet core SDKとランタイムがインストールされていました。これはどういうわけかテストを見つけることを試みるときVSに静かにエラーを引き起こしていました。

問題を検証する

コマンドラインに行き、dotnetのバージョンを$ dotnet --versionにすることで問題を検証できます。インストールした最新バージョン以外のものが表示された場合は、使用しているマシンといくつかの不一致があり、正しいバージョンを使用していません。例... dotnet core 1.0.1がインストールされているのに、コマンドプロンプトでバージョンが表示され、1.0.0と表示された場合は問題です。

ソリューション

古いものをすべて削除します。私は私が削除しなければならなかったけれども私が始めたもの(最も古いdotnet rcバージョン)だけで始めました、しかしそれは問題をテストするときまだ間違ったバージョンを与えました。結局、私は完全にきれいにすることを認めました。私...

  • すべてのVisual Studioアプリケーションをアンインストールしました(私のマシンではVS2015とVS2017)
  • すべてのバージョンのdotnet coreをアンインストールしました(最新のものでさえ)

私のマシンがすべてのVSとドネットを完全に空にした後、私はインストールしました only VS2017(それは最新のdotnetに同梱されています)。 xUnitテストプロジェクトを作成しましたが、テストエクスプローラですぐにテストが見つかりました _解決済み_

これはやり過ぎのように思えるかもしれませんが、私は他の方法でこれを直すことを試みるのに2週間を費やしました。あなたが問題を抱えているだけでそれをするなら、たとえアイテムをアンインストール/再インストールするのにあなたに何時間もかかるかもしれませんがそれはおそらくあなたの時間を節約するでしょう。

参考文献

  • @epestic ブログの投稿 を参照してください。彼はこの問題の修正に関する詳細を説明しています。
0
rayepps