Domanda

Basta entrare nel test unitario con C ++. Sembra che dovrò scrivere diverse classi di stub mentre vado avanti. La mia comprensione è che c'è una differenza tra beffe e mozziconi. Fondamentalmente sembra che i bechi siano per quando stai testando qualcosa è successo sull'oggetto (ad esempio la verifica) mentre i mozziconi facilitano semplicemente il test. Immagino per deridere, posso usare Googlemock ma non vedo nulla per la creazione di stub (Ala Rhinomocks 'GenetateStub).

C'è un modo per ottenere stub generati automaticamente? Googlemock ha qualche supporto per le buste? O devo praticamente creare manualmente stub per i test?

È stato utile?

Soluzione

Penso che il pezzo mancante del puzzle sia che non devi impostare un'aspettativa su un metodo e invece puoi semplicemente impostare un valore di ritorno predefinito.

Dompioni

Tutte le discussioni ed esempi nel "Google Mock per i manichini"È focalizzato sull'impostazione delle aspettative. Tutto parla dell'uso di un codice simile a quanto segue:

EXPECT_CALL(turtle, PenDown())
      .Times(AtLeast(1));

Che è quello che vuoi per deridere, ma per lo stuzzichino non hai aspettative. Dopo aver letto quell'intro, non avevo idea di come usare Googlemock per lo stopbing.

Mozziconi

Il commento di Ratkok mi ha portato a scoprire come impostare un valore di restituzione predefinito. Ecco come specificare un valore di ritorno per un oggetto deriso ma nessuna aspettativa:

ON_CALL(foo, Sign(_))
      .WillByDefault(Return(-1));

http://code.google.com/p/googlemock/wiki/cookbook#setting_the_default_actions_for_a_mock_method

Sembra che Googlemock emetterà un avvertimento se si chiama un metodo che non ha aspettiti. Apparentemente puoi impedire questo avvertimento usando il loro BELEMOCK Costruisci o puoi semplicemente ignorarlo. Inoltre, sembra che tu possa evitare l'avvertimento usando invece un'aspettativa (che non sono sicuro se sia una buona idea per gli stub). Dal Domande frequenti di Google Mock:

EXPECT_CALL(foo, Bar(_))
    .WillRepeatedly(...);

Credo che sia esattamente quello che stavo cercando di capire.

Aggiornare

Posso confermare che funziona. Ho scritto un test unitario utilizzando Google Test insieme a Googlemock ed sono stato in grado di stupirsi un metodo per una classe utilizzando ON_Call.

Altri suggerimenti

L'unica differenza tra una finta e uno stub è che una finta impone il comportamento, mentre uno stub no.

Per quanto ne so, i mock di Google Mock sono in realtà stub per impostazione predefinita. Endono il comportamento solo se si mette asserzioni sui vari metodi.

Guarda questo: Stubgen e la discussione simile qui.

Questa domanda Forse anche utile/correlato.

Per quanto riguarda Google Mocks: lo utilizziamo sul mio progetto attuale per automatizzare completamente l'implementazione di stub. Praticamente l'intera base di codice stub viene implementata utilizzando Google Mocks.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top