2016-07-21 34 views

Antwort

3

ändern Implementierung Ihrer Methode set_enable eine Hilfsmethode zu verwenden, wie folgt aus:

void set_enable(bool enabled = true) { set_enable_impl(enabled); } 

nun in der Klasse MockA, ein Mock-Methode für set_enable_impl erstellen:

MOCK_METHOD1(set_enable_impl, void(bool)); 

Dann verwenden Sie einfach in Ihrem Produktionscode set_enable wie Sie in erster Linie, während in Tests Sie ca n set Erwartungen Methode set_enable_impl:

MockA mockA; 
EXPECT_CALL(mockA, set_enable_impl(_))...; 

Eine Alternative wäre, das Verfahren zu überlasten, indem Versionen mit Eins- und Null-Parametern. Es liegt an Ihnen zu bestimmen, welcher Weg für Ihren Fall besser funktioniert.

+0

Es wäre besser gewesen, wenn es keine Änderung des ursprünglichen Codes nur für Testzweck gab. Übrigens akzeptiere ich deine Antwort als die beste, wenn es keinen anderen Weg gibt. – nyarlathotep108

+0

@ nyarlathotep108 Es gibt eine Alternative, aber es muss auch der ursprüngliche Code geändert werden. Siehe meine aktualisierte Antwort. –

+0

@ nyarlathotep108 Markieren Sie die Antwort als akzeptiert, wenn Sie keine bessere Lösung gefunden haben, oder teilen Sie sie uns bitte mit. –

6

Dies ist eine Alternative von Marko Antwort: Wenn Sie wollen nicht Ihre ursprünglichen Code ändern, implementieren nur die Helfer in der Mock-Klasse:

class A 
{ 
public: 
    void set_enable(bool enabled = true); 
}; 

class MockA : public A 
{ 
    MOCK_METHOD1(set_enable_impl, void(bool)); 
    virtual void set_enable(bool enabled = true) 
    { 
     set_enable_impl(enabled); 
    { 
}; 

Sie haben noch Anrufe von set_enable_impl erwarten in Ihrem Tests, zum Beispiel

MockA mockA; 
EXPECT_CALL(mockA, set_enable_impl(true)).Times(Exactly(1)); 
EXPECT_CALL(mockA, set_enable_impl(false)).Times(Exactly(1)); 
+0

Dies sollte die richtige Antwort sein. Der gesamte Zweck der Standardparameter besteht darin, überflüssige überladene Methoden im Produktionscode zu vermeiden. –