Test dell'unità / Come convalidare i campi privati di un oggetto appena creato?

2

Ho un test unitario di base (per il campione) che coinvolge questo codice:

void testShouldCreateACar() {
  Car car = someone.createFerrari();
  assertTrue(car.name == "Ferrari"); // can't access name since name is private
}

Non riesco ad accedere a name poiché non esiste un getter in Car (o Ferrari ) per esso.
Non voglio creare getter solo per scopi di test unitari.

Si noti che il SUT è fuori dal pacchetto dell'auto (pacchetto distinto).
Nota anche che il costruttore di Ferrari è private (creazione accessibile solo attraverso il metodo createFerrari() su someone .

Che cosa è una buona pratica per ottenere questa affermazione?

    
posta Mik378 15.06.2016 - 15:52
fonte

2 risposte

7

Se il nome dell'auto non è pubblicamente disponibile in alcun modo, allora non ha senso testarlo, perché ovviamente non importa a nessun codice cliente. Se il nome dell'auto è importante, anche se non riesci a vederlo ispezionando il campo, quindi esercita un metodo che si basa sul fatto che il nome sia corretto e asserisci alcuni risultati visibili.

Modifica dopo aver chiarito il commento: Se il tuo ORM si preoccupa dei campi privati, direi che sarebbe molto più vantaggioso testare indirettamente tramite test di integrazione. Probabilmente non mi spingerei a scrivere test specifici per tutti i campi di tutte le classi, mi sembra troppo complesso. Consiglierei solo di scrivere alcuni test di integrazione che richiedono che la persistenza funzioni, e vedrai il riflesso controllato in modo implicito.

    
risposta data 15.06.2016 - 15:58
fonte
0

Cambia l'ambito del campo.

Se il nome è importante e tale comportamento deve essere verificato, rendi quel campo public . In questo caso, rendilo public read only . Quindi uno sarà in grado di testare lo stato dell'oggetto dopo che il costruttore è stato attivato.

    
risposta data 15.06.2016 - 17:53
fonte

Leggi altre domande sui tag