6

単体テストの対象である場合、実行したくないコードのセクションがあります。私がチェックできるgtestライブラリによって設定された#definedフラグを見つけたいと思っていました。その目的で使用されているものは見つかりませんでしたが、gtest ヘッダーを調べたところ、次のように使用できると思われるものを見つけました。

SomeClass::SomeFunctionImUnitTesting() {
    // some code here
    #ifndef GTEST_NAME
    // some code I don't want to be tested here
    #endif
    // more code here
}

すべてのコードが関係なく実行されるため、これは機能しないようです。動作する可能性があることを確認できる別のフラグはありますか?

4

2 に答える 2

6

Google Test は独自のビルド ラッパーを必要とせず、提供しません。場合によってはソース ファイルを再コンパイルする必要さえありません。それらをテストコードと一緒にリンクするだけです。テスト コードは、コンパイル済みのライブラリ コードを呼び出します。あなたのライブラリ コードには、Gtest ヘッダーも含まれていない可能性があります。

ライブラリ コードをテスト中に別の方法で実行したい場合は、最初に、ライブラリ コードがテスト中に別の方法でコンパイルされていることを確認する必要があります。別のビルド ターゲットが必要になります。そのビルド ターゲット用にコンパイルするときに、テスト モードであることをコードに示すシンボルを定義できます。GTESTその記号の接頭辞は避けたいと思います。Google 独自のコードで使用するために残します。


探しているものを達成する別の方法は、依存性注入を使用することです。特別なコードを別のルーチンに移動します。おそらく独自のクラスに移動します。その関数またはクラスへのポインターを関数に渡してSomeFunctionImUnitTesting呼び出します。そのコードをテストするとき、テスト ハーネスでそのコードに別の関数またはクラスを渡すことができるため、コードを何度もコンパイルしなくても問題のあるコードを回避できます。

于 2011-05-20T21:46:43.683 に答える