Unit test JSON codice di analisi?

6

Nella mia umile visione del test dell'unità, un'unità test testa una singola unità di codice. Per me, questo significa una singola classe. Ogni dipendenza per quella classe viene derisa nella corrispondente classe di test e passata nel costruttore (o iniettata tramite un contenitore DI). Ciò consente di testare la classe in completo isolamento dal resto del sistema. Prendo questo come la verità del Vangelo su cosa dovrebbe essere un test unitario. Se stai testando più classi real (più di una classe nella tua classe di test non è una simulazione), allora non hai un test unitario, hai un test di integrazione.

Dato questo punto di vista, ci sono cose che sembrano non rientrano nel regno del test unitario, anche se sembra che si stia testando una singola classe. Uno di questi tipi di test è il test di analisi dei dati. Ad esempio, data una classe di dati:

public class Person {
  private Name name;
  private PhoneNumber phoneNumber;
  private Address address;
}

un test unitario presunto tenta quindi di convalidare l'analisi corretta:

@Test
public void shouldParsePerson() {
    String json = "{ the json would be here }";
    Person person = new Gson().fromJson(json, Person.class);

    assertThat(person.getName().getFirst()).isEqualTo("Jim");
    // more assertions based on what the JSON was would be here
}

Cos'è questo test davvero? Per quanto mi riguarda, sembra che stia testando che Gson funziona. Il test è strettamente accoppiato sia alla struttura del JSON che alla classe in Java a cui è associata. Il test vale davvero la pena di essere scritto? Vale la pena mantenere? È utile? Non sarebbe un test di integrazione da qualche altra parte che si basa sul codice di analisi cattura questo comunque?

C'è un'altra domanda qui che è correlato alla mia domanda, ma in realtà è diverso perché sta chiedendo come ai consumatori unitari di test di un'API che fascia le classi di terze parti, mentre io Chiedo che cosa costituisce un test unit valido che coinvolga una classe di terze parti. La mia domanda è di natura più filosofica, mentre l'altra è più pratica. La mia domanda potrebbe anche essere estesa a cose come test del codice di configurazione che non coinvolge necessariamente le classi di terze parti.

    
posta Christopher Perry 18.03.2014 - 19:28
fonte

1 risposta

11

In generale, il test dell'unità dovrebbe testare il tuo codice, non il codice di qualche libreria. Presumibilmente la libreria contiene già i suoi test di unità.

Certamente, uno o due test unitari ti aiuteranno a capire come funziona la biblioteca e come funziona. Ma test dettagliati di questo tipo generalmente rientrano nella competenza dei test di integrazione.

    
risposta data 18.03.2014 - 19:31
fonte

Leggi altre domande sui tag