2017-09-08 1 views
1

Je veux utiliser un Mock avec un NiceMock. Le Mock a un constructeur qui prend un autre Mock comme argument. Ce petit exemple de code que j'ai qui fonctionneNiceMock un Mock qui a un autre Mock comme paramètre constructeur

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); 
    } 
    ... 
}; 

Cela fonctionne très bien, mais si je tente d'utiliser MockClassB avec un NiceMock comme celui-ci

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

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

je reçois une erreur de compilation en disant cannot convert argument 1 from 'const MockClassA' to 'ClassA &'. Notez que l'erreur est sur ClassA, qui est le type de l'argument du constructeur pour ClassB. Il ne contribue pas à envelopper ClassA dans un NiceMock comme NiceMock<MockClassA> a, je viens d'obtenir une erreur similaire: cannot convert argument 1 from 'const testing::NiceMock<MockClassA>' to 'ClassA &'

J'ai d'autres classes que je suis basé sur un modèle en utilisant avec NiceMock qui travaillent, mais ils n'ont des paramètres du constructeur .

Des idées?

Répondre

1

L'argument dans le constructeur ClassB est une référence non-const à ClassA, ce qui n'est pas autorisé dans NiceMock. Selon documentation, l'un de la limitation est:

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

Pour le faire fonctionner, passer une référence const au lieu

ClassB(const ClassA & a) { } 

ou passer un pointeur vers ClassA

ClassB(ClassA * a) { } 
+0

Le pointeur travaillé! Merci! – Martin