2012-02-13 13 views
12

Sto usando gmock per test di unità codice C++. Non sto utilizzando il framework gtest. Sto usando il framework di test integrato di Visual Studio 2008.Generazione automatica di classi di simulazione per gmock

Ora il mio problema è che devo scrivere manualmente le classi di simulazione per un vero test di classe. Per esempio se ho una classe con 5 funzioni, allora devo scrivere MockAClass con 5 funzioni. C'è un modo in cui queste classi vengono generate automaticamente.

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

risposta

18

c'è uno strumento in bundle con il progetto finto google che vi aiuterà a farlo. Comunque penso che lo strumento richieda l'installazione di python, e non so quanto bene funzioni in un ambiente Windows. Ho anche scoperto che i file generati a volte richiedono un piccolo ritocco per funzionare perfettamente.

Ecco le informazioni dal docs:

Suggerimento: se anche questo è troppo lavoro per voi, troverete lo strumento gmock_gen.py in di Google Mock script/generatore/directory (per gentile concessione del progetto cppclean) utili. Questo strumento da riga di comando richiede l'installazione di Python 2.4. Gli dai un file C++ e il nome di una classe astratta definita in esso, e stamperà la definizione della classe di simulazione per te. A causa della complessità del linguaggio C++ , questo script potrebbe non funzionare sempre, ma può essere piuttosto utile quando lo fa. Per maggiori dettagli, leggi la documentazione per l'utente.

Ecco new localization of this script.

+0

grazie, cerco di usarlo e spero che funzioni, –

+0

funziona. Grazie. –

+1

Funziona sicuramente su Windows. Sono su Python 2.7 e va bene. I caveat usuali si applicano per le modifiche della mano ... – rholmes

2

Disclaimer: usato per lavoro a Typemock

Hai pensato di usare un altro strumento?
Typemock ha uno strumento chiamato Isolator++ che non ha bisogno di scrivere "classi di derisione".

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

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

Si può imparare di più riguardo a questo about page

+0

ho letto su isolatore ++. ma non è gratuito. devi ottenere la licenza per questo. –

+1

Sì - sfortunatamente vogliono soldi per il loro duro lavoro;) –

+3

@DrorHelper Probabilmente vale un disclaimer che hai usato per lavorare con Typemock. (Non che ciò lo renda un prodotto scadente, ecc., Ma è utile divulgare tali potenziali fonti di pregiudizio). –