2

現在、いくつかのレガシー コードの単体テストを作成しようとしています。私の関数の 1 つで、別の関数を呼び出します。内部関数の戻り値によると、3 つの分岐条件が存在します。コードは C++ で記述されており、cxxtest フレームワークを使用しています。内部関数の戻り値を実装せずに操作して、すべての分岐条件を通過できるようにするにはどうすればよいですか? 関数間の依存関係を避けることを好みます。これを行う方法はありますか?

4

2 に答える 2

2

関数間にはすでに依存関係があります。一方が他方を呼び出します。

解決策は、パラメーターとして内部関数を取るように外部関数を変更することです。次に、テスト時に好きな値を返す関数と、アプリケーションの残りの部分で役立つ関数を渡すことができます。

おそらくコンパイル時にバインドします。

struct inner_function {int operator()();}
struct mock {int operator ()();}

template <typename F = inner_function>
int outer_function()
{
    if (F {}())
      return 1;
    else
      return 2;
}


// in a test
int r = outer_function <mock>();

必要に応じて、実行時に関数ポインターを使用してこれを行うことができます。テンプレートをクライアントコードから隠すために、おそらく別のラッパーを追加するでしょう。

于 2016-06-29T12:22:05.680 に答える