2012-02-13 15 views
12

Używam gmock dla jednostki testowania kodu C++. Nie używam modelu gtest framework. Korzystam z wbudowanego środowiska testowego Visual Studio 2008.Automatyczne generowanie próbnych klas dla gmock

Teraz mój problem polega na ręcznym zapisywaniu próbnych klas dla prawdziwej klasy do testu jednostkowego. Na przykład, jeśli mam klasę A z 5 funkcjami, to muszę napisać MockAClass z 5 funkcjami. Czy jest jakiś sposób, że te klasy są generowane automatycznie.

class AClass 
{ 
public: 
    virtual int AFunction() 
    { 
     return 5; 
    } 
    virtual int AFunctionWithArguments(int x) 
    { 
     return x; 
    } 



class MockAClass : public AClass 
{ 
public: 
    MOCK_METHOD0(AFucntion, int()); 
    MOCK_METHOD1(AFunctionWithArgument, int(int x)); 
}; 

Odpowiedz

18

Jest to narzędzie w pakiecie z google makiety projektu, które pomogą Ci to zrobić. Jednak myślę, że narzędzie wymaga zainstalowania Pythona i nie wiem, jak dobrze działa w środowisku Windows. Zauważyłem również, że wygenerowane pliki czasami wymagają drobnych poprawek, aby działały idealnie.

Oto info z docs:

Wskazówka: Jeśli nawet to jest zbyt dużo pracy dla Ciebie, znajdziesz narzędzie gmock_gen.py w google Mock scripts/Generator/katalogów (dzięki uprzejmości projektu cppclean). To narzędzie wiersza polecenia wymaga zainstalowanego Python 2.4. Dajesz mu plik C++ i nazwę zdefiniowanej w nim klasy abstrakcyjnej, a on wydrukuje dla ciebie definicję klasy próbnej. Ze względu na złożoność języka C++ ten skrypt może nie zawsze działać, ale może być całkiem przydatny, gdy to robi. Aby uzyskać więcej informacji, przeczytaj dokumentację użytkownika.

Oto new localization of this script.

+0

dziękuję, staram się z tego korzystać i mam nadzieję, że działa, –

+0

jego działanie. dzięki. –

+1

To zdecydowanie działa w systemie Windows. Jestem w Pythonie 2.7 i jest w porządku. Zwykłe ostrzeżenia dotyczą ręcznych poprawek ... – rholmes

2

Disclaimer: wykorzystywane do pracy w Typemock

Czy za pomocą innego narzędzia?
Typemock ma narzędzie o nazwie Isolator++, które nie wymaga pisania "lekcji szyderczych".

TEST_F(IsolatorTests, SomeTest) 
{ 
     AClass* fakeclass = FAKE(AClass); 
     WHEN_CALLED(fakeclass->AFunction()).Return(10); 

     ASSERT_EQ(10, fakeclass.AFunction()); 
} 

Możesz się dowiedzieć więcej na ten temat w tym about page

+0

Przeczytałem o izolatorze ++. ale to nie jest darmowe. musisz uzyskać na to licencję. –

+1

Tak - niestety chcą pieniędzy za ciężką pracę;) –

+3

@DrorHelper Prawdopodobnie wart uwagi, że pracowałaś dla Typemock. (Nie oznacza to, że jest to zły produkt itp., Ale dobrze jest ujawnić takie potencjalne źródła błędu). –

Powiązane problemy