0

さて、私は単体テストに gtest を使用しています。やりたいことがあります。

class A {
    /* Private members */
public:
    bool function_to_test(int index);
}

テスト関数では、次を使用したいと思います。

A testEntity;
const int b = 40;
ASSERT_PRED1(testEntity.function_to_test, b);

ASSERT_PREDxグローバルスコープ関数用に設計されているように見えるため、これは機能しません。次の行にメッセージが表示されます

argument of type ‘bool (A::)(int) {aka bool (A::)(int)}’ does not match ‘bool (A::*)(int)’

これに良い回避策があるかどうか疑問に思っていましたか?グローバル変数を持つ関数はいつでも使用できますが、1 行で回避できるかどうかはわかりませんでした。

4

1 に答える 1

1

の最初の引数ASSERT_PRED1(pred1, val1);は、呼び出し可能なオブジェクトでなければなりません。単項関数またはファンクタ。

たとえば、C++11 ラムダを使用できる場合は、次のようにすることができます。

ASSERT_PRED1([&testEntity](int i) { return testEntity.function_to_test(i); }, b);

または、単項関数ヘルパーを使用する場合:

struct TesterA : public std::unary_function <int, bool> {
  explicit TesterA(A& a) : a_(a) {}
  bool operator()(int i) { return a_.function_to_test(i); }
  A& a_;
};

ASSERT_PRED1(TesterA(testEntity), b);
于 2013-01-19T06:15:48.947 に答える