私はそれをインストールして以来、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テストランナーにテストを見つけることができません。
DEL %TEMP%\VisualStudioTestExplorerExtensions
Microsoft.DotNet.InternalAbstractions
( SO postを参照 )test -> test settings -> default processor architecture
はx86に設定されています 質問
誰もがVS2017で.Net Core 1.1.0ソリューションの実例(.csprojプロジェクトファイル)を提供できますか?ここでVSテストエクスプローラーが正常に単体テストを見つけます _または_ show me与えられた例の問題.
これはちょうど私のために働いた(それが何かを破損したワークスペースを変更した結果であるかどうかわからない):
%TEMP%\ VisualStudioTestExplorerExtensions内のVSテストキャッシュファイルを削除してVS2017を再起動します。
.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のテスト を参照してください。
私は同じ問題を抱えていて、次のようにすることによってそれを働かせました..:
テストクラスをpublicにして、内部のテストメソッドが発見されないようにするのを忘れた
私はデフォルトのxUnitプロジェクトを持っていて、UnitTest1.csというサンプルを削除し、それをいくつかのテストでコントローラテストクラスに置き換えましたが、何も見つかりませんでした。
XUnit、Test.Sdk、xUnit.runnerの各パッケージを更新し、プロジェクトを再ビルドした後、長い間、ビルドエラーが発生しました。
エラーxUnit1000テストクラスはパブリックである必要があります
ありがたいことに、更新されたバージョンは私にいくつかの問題を解決するためにこの例外を投げました
テストクラスを公開するように修正して問題を修正しました
私の場合、私はテストプロジェクトをx64
Architectureに設定し、テスト設定Architecture(test-> Default Processor Architecture)をx86
に変更しました。彼らは一致しませんでした。
テスト設定Architectureをx64
に戻して再構築した後、すべてのテストが再発見されました。
MSDNの下で古くなった記事を読んではいけません。 .NET Core関連資料はdocs.Microsoft.comにあります。
https://docs.Microsoft.com/ja-jp/dotnet/articles/core/testing/
一般的に言って、単体テストケースを含めるには.NET Coreコンソールアプリケーションが必要です。
私は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でそれらのユニットテストを発見しました。
正しい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>
しかし私はそれが必要であるとは思わない。
OPが彼のチェックリストにこれを記載していることは知っていますが、Visual Studio 2017のクリーンインストールを実行して新しいプロジェクトを設定しながら、その点を見落とすのは簡単です。 NUnitプロジェクトテンプレートとは別に および NUnitフレームワーク NUnitアダプタを個別にインストールする必要があります。 NuGetコマンドInstall-Package NUnit3TestAdapter -Version 3.9.0
を使います。その後、Visual Studio Community 2017は問題なく単体テストを発見し始めました。
私にとっての問題は、私が誤ってテストケースを内部クラスに入れたことです
[TestClass]
internal class TestLib {
}
それはテストケースが識別されていない原因でした。
私の場合は、プロジェクトを新しいソリューションに移行した後、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.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ライブラリを並べて参照できないバグがいくつかあるようです。これがお役に立てば幸いです。
詳細情報:
私の場合は、テストプロジェクトを以前の.NETバージョンからアップグレードしたプロジェクトでした。 app.configで私は従属アセンブリの以前のバージョンへのassemblybindingを持っていました。
App.configでassemblybindingsを修正した後、私のテストは発見されました。
Visual Studioが私のテストを見つけることができず、メソッド以外にそれらを実行するボタンが表示されず、プロジェクト内のすべてのテストを実行しても問題が解決されないという問題がありました。
私のテストクラスは一般公開されていませんでした。公開することでVSはテストを発見することができました。
C++の場合
C++テストに関する特別な質問はありませんが、トピックはほとんど同じなので、テスト検出で問題が発生したときに役立ちました。
デスクトップ開発をC++ のみでインストールした場合、解決策は ユニバーサルWindowsプラットフォーム開発 /オプションの C++ユニバーサルWindowsプラットフォームツールを使用して をインストールすることです。これらはVisual Studio Webインストーラで選択できます。
その後、テストプロジェクトを再構築するとテストディスカバリはうまくいくはずです。
ところで、私はVS2017でユニットテストプロジェクトを作成しました。何人かのユーザーが、VS2015からVS2017に移行されたプロジェクトで発見問題があると述べたので、それは重要かもしれません。
古い.dllを削除すると解決するはずです。 C:\ Users(yourusername)\ AppData\Local\Tempの%TEMP%ディレクトリにある一時ファイルの消去
私の場合、上記のどれも助けにはなりません。しかし、私はNUNit3TestAdapterをバージョン3.8.0にダウングレードしてから最新のバージョン(3.10.0)にアップグレードします。
私は同じ問題を抱えていました。私の解決策は問題ありませんでしたが、突然解決策を開くとテストが終わったことがわかりました。
最後に、Microsoft.VisualStudio.TestPlatform.TestFramework
とMicrosoft.VisualStudio.TestPlatform.TestFramework.Extensions
パッケージを(NuGetマネージャを使って)非常に古いバージョンにダウングレードし、テスト方法を示しました。それから私は最新バージョンにアップグレードしました、そしてまだそこにありました。
パッケージをダウングレードしてアップグレードするだけです。
解決策は、私のapp.config
ファイルを私のユニットテストプロジェクトから削除することでした。テストが再表示されます。
このファイルは実際にはプロジェクトの参照に存在していなかったbindingredirectsでいくつかのdllを参照しました。プロジェクトに厳密に必要なアセンブリバインディングを再追加します。
私はすべてを試したが何も助けなかった。私の場合は、いくつかのテストプロジェクトを含むソリューションを使用していましたが、そのうちのいくつかは古いms-testフレームワークを使用していたので、Visual Studioはそれらだけを見つけました。
受け入れられた答え に示されているように、私はすべてのテストプロジェクトのためのテストフレームワークパッケージをインストールしました。その後、古い品質ツールへの参照を削除し、Visual Studioを再起動すると、すべてのテストを見ることができます。
私の場合、問題はプロジェクトの種類が静的ライブラリ(lib)に設定されていて、動的ライブラリ(dll)になっていることでした。
テストの名前空間を変更するとうまくいくことがあります。私は以下のようなフォルダ構造を持っていました:
A |___B | |___D |___C___E
名前空間はTests。<name>のようにフラットであり、テストウィンドウに表示されませんでした。名前空間をディレクトリの構造に変更すると、すべてのテストが表示されました。今、私は私が欲しい他の名前空間構造に戻ることができました。
あなたのプロジェクトを構築することを忘れないでください!
場合によっては、単体テストコードにstackoverflow例外があると、Visual Studioによってその単体テストケースが実行されていないとマークされ、それ以降の他のテストケースの実行が停止されます。
この場合は、どのケースでstackoverflow例外が発生しているのかを特定する必要があります。
プロジェクトのBINおよびOBJフォルダを削除しました。私がそうすると、すべてが正しく機能しました。
最初はMSTestを使おうとしました。その後、私はそれをNunitテストに変更します。それから私はMSTestをバックアップしたいと思いました。すべてのnUnitコードと参照を削除しましたが、Test ExplorerはMSTestメソッドを表示しませんでした。解決策:私はすべてのmstest nugetの参照を削除して再インストールしました。完了しました。
私にとっては、テストプロジェクトの.csproj
ファイルのTargetFrameworkを
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
に
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
働いた。
.NET Frameworkの場合、テストプロジェクトには、以前は次のDLLへの参照がありました。
Microsoft.VisualStudio.TestPlatform.TestFramework
Microsoft.VisualStudio.TestPlatform.TestFramework.Extentions
私はそれらを削除し、以下への参照を追加しました:
Microsoft.VisualStudio.QualityTools.UnitTestFramework
そして、すべてのテストが表示され、以前と同じように機能し始めました。
上記の他の提案のほとんどすべてを試しましたが、テストDLLを再参照するだけで問題ありませんでした。私の場合はこの回答を投稿しました。
問題は、Visual Studioがマシン上のdotnetコアバージョンと混同されることです。私がコントロールパネル - >プログラムのアンインストールに行ったとき、私は8つの異なるdotnet core SDKとランタイムがインストールされていました。これはどういうわけかテストを見つけることを試みるときVSに静かにエラーを引き起こしていました。
コマンドラインに行き、dotnetのバージョンを$ dotnet --version
にすることで問題を検証できます。インストールした最新バージョン以外のものが表示された場合は、使用しているマシンといくつかの不一致があり、正しいバージョンを使用していません。例... dotnet core 1.0.1
がインストールされているのに、コマンドプロンプトでバージョンが表示され、1.0.0
と表示された場合は問題です。
古いものをすべて削除します。私は私が削除しなければならなかったけれども私が始めたもの(最も古いdotnet rcバージョン)だけで始めました、しかしそれは問題をテストするときまだ間違ったバージョンを与えました。結局、私は完全にきれいにすることを認めました。私...
私のマシンがすべてのVSとドネットを完全に空にした後、私はインストールしました only VS2017(それは最新のdotnetに同梱されています)。 xUnitテストプロジェクトを作成しましたが、テストエクスプローラですぐにテストが見つかりました _解決済み_
これはやり過ぎのように思えるかもしれませんが、私は他の方法でこれを直すことを試みるのに2週間を費やしました。あなたが問題を抱えているだけでそれをするなら、たとえアイテムをアンインストール/再インストールするのにあなたに何時間もかかるかもしれませんがそれはおそらくあなたの時間を節約するでしょう。