どのコード行がどのテストで合格するかを理解する方法を見つけたいと思って、私は NUint をいじっていました。
3 つのテストがあるメソッドがあるとします。どのテストがどのコード行をチェックするかを調べる方法はありますか?
NCover を使用したことで、どのラインがテストされ、どのラインがテストされていないかがわかります。ただし、どのユニットがそのコードをチェックしたかは実際にはわかりません。
大量のテストを処理する場合に非常に役立ちます...
どのコード行がどのテストで合格するかを理解する方法を見つけたいと思って、私は NUint をいじっていました。
3 つのテストがあるメソッドがあるとします。どのテストがどのコード行をチェックするかを調べる方法はありますか?
NCover を使用したことで、どのラインがテストされ、どのラインがテストされていないかがわかります。ただし、どのユニットがそのコードをチェックしたかは実際にはわかりません。
大量のテストを処理する場合に非常に役立ちます...
JetBrains dotCoverは、探している情報を取得するのに役立ちます。ReSharperユニットテストランナーと統合し、テストごとのデータを収集します。どのコードがそれぞれの特定のテストでカバーされているかを確認できます(VSでの対応する強調表示付き)。さらに興味深いのは、コードのすべての部分について、それをカバーするテストのリストを取得し、それらを簡単に再実行できることです。
追加情報はここで入手できます:http: //blogs.jetbrains.com/dotnet/2010/07/show-covering-test-with-dotcover/
こんにちは、ほとんどの人が回答しているように、現時点でほとんどのカバレッジ ツールでこれを行う唯一の方法は、各テストを単独で実行してから、各テストのカバレッジを表示することです。
ただし、OpenCover を使用することは可能ですが、少し手間がかかります。テストとターゲットからすべてのシーケンス ポイントを到着順にキャプチャして保存し、これらの結果をテストごとに分析する場合、これは OpenCover の本来の目的の 1 つです - https://github.com/ sawilde/opencover/wiki . 現在、OpenCover はこれらの結果を集計してから訪問データを破棄しますが、保存することはできます。もちろん、並行して実行されているテストが存在する場合は、それらに注意する必要があります。データの量は気が遠くなる可能性があり、それがまだ実装されていない理由の 1 つです。
あなたが探しているものと直接一致するものは何も知りません。私は最近、この正確な機能が必要な自動化された障害ローカリゼーションのプロジェクトを行いました。私たちが思いついた唯一の解決策は、各メソッドのカバレッジ情報も収集する独自のテスト ランナーをロールすることでした。
Test Impact Analyzerを導入した Visual Studio 2010 (Premium および Ultimate) を使用してこれを達成する間接的な方法があるかもしれません。これにより、どのテストがソース コードの変更の影響を受けるかを判断できます。ただし、これは MSTest でのみ機能します。このブログ投稿の手法を使用して、NUnit テストを MSTest で実行できるようにすることができます。
簡単な答えは、「各テストを単独で実行し、そのテストのテスト カバレッジ データを収集する」ことです。
それをどのように整理するかは、特定のテスト カバレッジ ツールと、テストの実行方法に依存する場合があります。
テスト カバレッジ ツールの場合、テスト カバレッジ インストルメンテーション ステップによってソフトウェアに追加された明示的な「TestCoverageDump」メソッドがあります。通常、このメソッドの呼び出しはアプリケーションの「メイン」プログラムに挿入されるため、終了時に、実行したテストのテスト カバレッジ データを取得できます。
あなたのタスクでは、コードを実行している単体テストを変更して、各テストの後に「TestCoverageDump」に続いて「TestCoverageReset」(これも挿入)で明示的な呼び出しを行い、各テストが独自のベクトルを取得するようにします。テストの名前をベクターに関連付ける方法は、ソースで提供されている「TestCoverageDump」コードを少し調整するという代償を払って、完全に制御できます。
当社のテスト カバレッジ表示ツールを使用すると、個々のベクトルをすべて簡単に組み合わせて、全体像を把握できます。または、特定のベクトルのカバレッジを表示できます。表示ツールを使用すると、さまざまなテストのカバレッジを比較することもできます (それらはどこで交差するか? 一方のテストでは何が行われ、他方では行われないのか?)
このテストごとのカバレッジ データがあれば、どのテストを再実行する必要があるかを判断することもできます。コードを変更してインストルメンターを再実行すると、ベクトルが以前にカバーした変更されたコードに基づいて、どのテスト カバレッジ ベクター (たとえば、どのテスト) を再度実行する必要があるかがわかります。
あなたが探している用語は「コードカバレッジ」です。
NUnit でこれを行う方法については経験がありませんが、これを NUnit で利用できるようにする codeplex プロジェクトがあるようです: http://codecoveragerunner.codeplex.com/
どのテストがどのコード行をテストしているかを確認したい場合、コード行にブレークポイントを置いてテストをデバッグできますか? ブレークポイントにヒットしたら、どのテストが
他のテストで例外をスローする場合は、break on exception オプションを無効にできます。
NCover は、単体テストのカバレッジを計算するために使用できるツールです。NCover.com を参照してください。
テストをデバッグできます。NUnit を使用している場合は、プロセスを VS にアタッチできます。
最も簡単な方法は、単体テストを実行する TestDriven.NET の個人版をダウンロードしてインストールすることです。NCover を使用してコード カバレッジを実行およびレポートするオプションがあります。新しい NCover バージョンは商用ですが、TD.NET に含まれているバージョンは少し古いですが無料で使用できます。