2016-07-21 30 views

Odpowiedz

3

Zmień realizacja metodę set_enable użyć metody pomocnika, na przykład:

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

Teraz w klasie MockA utworzyć mock metodę set_enable_impl:

MOCK_METHOD1(set_enable_impl, void(bool)); 

Następnie w swoim kodzie produkcyjnym po prostu używaj set_enable, tak jak na pierwszym miejscu, podczas gdy w testach masz ok. n zestaw oczekiwania dotyczące metody set_enable_impl:

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

Alternatywą byłoby przeciążenia sposób poprzez wersji jednej i wartość zero. Od Ciebie zależy, która metoda będzie skuteczniejsza w Twoim przypadku.

+0

Byłoby lepiej, gdyby nie było zmiany oryginalnego kodu tylko w celu testowym. Przy okazji przyjmuję twoją odpowiedź jako najlepszą, jeśli nie będzie innej drogi. – nyarlathotep108

+0

@ nyarlathotep108 Istnieje alternatywa, ale wymaga to również zmiany oryginalnego kodu. Zobacz moją zaktualizowaną odpowiedź. –

+0

@ nyarlathotep108 Rozważ zaznaczenie odpowiedzi jako zaakceptowanej, jeśli nie znalazłeś lepszego rozwiązania, lub jeśli tak, to podziel się nią z nami. –

6

Jest to alternatywa odpowiedzi Marko: Jeśli nie chcesz, aby zmienić swój oryginalny kod, wystarczy wdrożyć pomocnika w udawanym zajęć:

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

trzeba jeszcze spodziewać wywołań set_enable_impl w twojej testy, na przykład:

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

To powinna być poprawna odpowiedź. Cały cel parametrów domyślnych polega na unikaniu zbędnych przeciążonych metod w kodzie produkcyjnym. –