アンマネージ C++ に VS2005 VC++ を使用しています。私は VSTS を持っており、コード カバレッジ ツールを使用して単体テストに関して次の 2 つのことを達成しようとしています。
- テスト対象の参照コードがどれだけ実行されているかを確認する
- テスト対象のコード (存在する場合) のどれだけのメソッドが単体テストされていないかを確認します
VSTS コード カバレッジ ツール (リンク テキストを参照) のセットアップとタスク 1 の実行は簡単でした。しかし、#2は私にとって驚くべき挑戦でした。これが私のテストコードです。
class CodeCoverageTarget
{
public:
std::string ThisMethodRuns() {
return "Running";
}
std::string ThisMethodDoesNotRun() {
return "Not Running";
}
};
#include <iostream>
#include "CodeCoverageTarget.h"
using namespace std;
int main()
{
CodeCoverageTarget cct;
cout<<cct.ThisMethodRuns()<<endl;
}
上記のように両方のメソッドがクラス内で定義されている場合、コンパイラは obj ファイルから ThisMethodDoesNotRun() を自動的に削除します。その定義をクラスの外に移動すると、それは obj ファイルに含まれ、コード カバレッジ ツールはそれがまったく実行されていないことを示します。ほとんどの状況では、コンパイラーにこの除去を行ってもらいたいのですが、コード・カバレッジ・ツールの場合、値のかなりの部分が無効になります (テストされていないメソッドの検出など)。私はコンパイラに私にとって賢くするのをやめてすべてをコンパイルするように指示するために多くのことを試みましたが、私は困惑しています. コード カバレッジ ツールがこれを補正してくれるといいのですが (ソースをスキャンしてリンカーの出力と照合することで可能だと思います)、有効にする特別なモードがあることを示唆するものは何も見つかりませんでした。
よろしくお願いします、KGB