Hai bisogno di aiuto per capire Mock e Stub

2

Sono nuovo per usare le strutture di derisione e ho alcune domande sulle cose su cui non sono chiaro. Sto usando Rhinomocks per generare oggetti finti nei miei test di unità. Capisco che i mock possono essere creati per verificare le interazioni tra i metodi e registrano le interazioni, ecc. E gli stub ti permettono di impostare i dati e le entità richieste dal test ma non verificare le aspettative sugli stub.

Guardando i recenti test unitari che ho creato, sembra che stia creando letteralmente mock allo scopo di eseguire lo stub e consentire l'impostazione dei dati. Si tratta di un uso corretto di mock o non è corretto se in realtà non stai chiamando per verificarli?

Ad esempio:

user = MockRepository.GenerateMock<User>();
        user.Stub(x => x.Id = Guid.NewGuid());
        user.Stub(x => x.Name = "User1");

Nel codice precedente ho generato un nuovo oggetto fittizio utente, ma io uso un simulato in modo da poter stubare le proprietà dell'utente perché in alcuni casi se le proprietà non hanno un setter e ho bisogno di impostarle sembra che l'unico modo sia di stubare i valori delle proprietà. È un uso corretto di stubbing e mocking?

Inoltre, non sono completamente chiaro su quale sia la differenza tra le seguenti righe:

user.Stub(x => x.Id).Return(new Guid());

user.Stub(x => x.Id = Guid.NewGuid());
    
posta Theomax 01.07.2013 - 21:32
fonte

2 risposte

3

I mock e gli stub sono concetti astratti. Guardando i documenti puoi trovare un modo per creare uno stub:

MockRepository.GenerateStub < ... >

Ma sembra che anche loro abbiano deciso di rendere conveniente il metodo di un Mock, come quello che stai facendo.

Greg Moeck ha fatto un'ottima presentazione sull'uso dei mock: link

    
risposta data 02.07.2013 - 23:46
fonte
3

Sto prendendo l'aiuto da questi link citati e cambierò di conseguenza secondo quanto ho capito:

Buoni collegamenti:

Buona spiegazione di Jim
Esplorazione di martin frowler
Link informativo, ma un po 'avanzato (parla dei test di integrazione)
Ok, prima di andare avanti ci sono due cose quando si è unità di test:
  1. Sate Testing
  2. Test di comportamento

Nel test dello stato stai controllando solo se il metodo effettivo o System Under Test (SUT) sta restituendo il valore corretto

Nel test del comportamento controlli se è stato chiamato il metodo corretto o, in altre parole, se è stata chiamata una sequenza corretta di metodi.

Stub forniscono risposte predefinite alle chiamate effettuate durante il test, di solito non rispondono affatto a nulla al di fuori del metodo di prova. In genere esegui test di stato.

Mazze vengono utilizzati per verificare l'interazione tra il tuo SUT e le sue dipendenze. In genere esegui test di comportamento qui

    
risposta data 04.07.2013 - 17:49
fonte

Leggi altre domande sui tag