2017-09-08 14 views
1

ニースモックでモックを使用したいと思います。モックには、別のモックを引数として取る1つのコンストラクタがあります。これは私が正常に動作NiceMockコンストラクタパラメータとして別のモックを持つモック

class ClassA 
{ 
    ClassA() { } 
}; 

template <class T> 
class ClassB> 
{ 
    ClassB(ClassA & a) { } // constructor, no default constructor for this class 
}; 

class ClassC 
{ 
    ClassC() { } 
}; 

class MyTest : public Test 
{ 
    MockClassA a; 
    MockClassB<ClassC> * b = NULL; 

    SetUp() 
    { 
     b = new MockClassB<ClassC>(a); 
    } 
    ... 
}; 

を動作する必要があり、コードの小さな例ですが、私はこの

MockClassA a; 
NiceMock<MockClassB<ClassC>> * b = NULL; 

SetUp() 
{ 
    b = new NiceMock<MockClassB<ClassC>>(a); 
} 

ようNiceMockでMockClassBを使用しようとすると、私はcannot convert argument 1 from 'const MockClassA' to 'ClassA &'を言ってコンパイルエラーを取得します。 ClassBのコンストラクタへの引数の型であるClassAにエラーがあることに注意してください。それは私だけなエラーが出る、NiceMock<MockClassA> aようNiceMock中にClassAをラップするのに役立ちません。cannot convert argument 1 from 'const testing::NiceMock<MockClassA>' to 'ClassA &'

私は仕事NiceMockで使用している他のテンプレートクラスを持っているし、彼らは任意のコンストラクタのパラメータを持っていません。

アイデア?

答えて

1

ClassBコンストラクタの引数はClassAの非const参照であり、NiceMockでは許可されていません。 documentationによると、制限の一つは、次のとおりです。

The constructors of the base mock (MockFoo) cannot have arguments passed by non-const reference

は、それを動作させる代わりに

ClassB(const ClassA & a) { } 

をconst参照を渡すか、ClassA

ClassB(ClassA * a) { } 
+0

働いていたポインタを指すポインタを渡すために!ありがとう! – Martin

関連する問題