2017-09-08 81 views
1

我想用NiceMock模擬。 Mock有一個構造函數,它將另一個模擬作爲參數。這是一個很小的代碼的例子,我有工作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); 
    } 
    ... 
}; 

這工作正常,但如果我嘗試使用MockClassB與NiceMock這樣

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

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

我得到一個編譯錯誤說cannot convert argument 1 from 'const MockClassA' to 'ClassA &'。請注意,該錯誤在ClassA上,這是ClassB構造函數的參數類型。它不利於包裝ClassA的像NiceMock<MockClassA> a一個NiceMock,我只是得到一個類似的錯誤: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

要讓它工作,傳遞一個const引用,而不是

ClassB(const ClassA & a) { } 

或指針傳遞給ClassA

ClassB(ClassA * a) { } 
+0

工作的指針!謝謝! – Martin