web-dev-qa-db-fra.com

Test de l'unité JSON CODE PARSING?

Dans mon humble vision de l'unité Test, un test d'unité teste une seule unité de code. Pour moi, cela signifie une seule classe. Chaque dépendance pour cette classe est moquée dans la classe d'essai correspondante et transmise dans le constructeur (ou injecté via un conteneur DI). Cela vous permet de tester la classe dans l'isolement complet du reste du système. Je suppose que la vérité de l'évangile de ce qu'un test unitaire est censé être. Si vous testez plusieurs Real classes (plus d'une classe de votre classe de test n'est pas une simulacre), vous n'avez pas de test d'unité, vous avez un test d'intégration.

Compte tenu de ce point de vue, il y a des choses qui semblent tomber en dehors du domaine des tests unitaires, même s'il semble que vous testez une seule classe. L'un de ces types de tests est l'analyse de données. Par exemple, étant donné une classe de données:

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

un test unitaire prétendu tente alors de valider une analyse correcte:

@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
}

Qu'est-ce que c'est vraiment testant? Pour moi, il semble tester que GSON fonctionne. Le test est étroitement couplé à la fois à la fois à la structure du JSON et à la classe in Java "est-ce que le test vaut vraiment la peine d'écrire? Est-ce la peine d'être maintenu? Est-ce utile? Un test d'intégration ailleurs qui repose sur le code d'analyse attraper cela quand même?

Il y a une autre question ici qui est liée à ma question, mais il est en fait différent car il est demandé comment Les consommateurs d'une API qui enveloppe des classes de troisième parties, tandis que je demande ce qui constitue un test valide unité Test impliquant une classe tierce partie. Ma question est de nature plus philosophique, tandis que l'autre est plus pratique. Ma question pourrait également être étendue à des choses comme le code de la configuration des tests qui n'impliquent pas nécessairement des classes de tiers.

6
Christopher Perry

En général, les tests unitaires doivent tester votre code, pas le code de certaines bibliothèques. Vraisemblablement, la bibliothèque contient déjà ses propres tests unitaires.

Certes, un ou deux tests unitaires vous aideraient à obtenir la sensation de la bibliothèque et comment cela fonctionne. Mais les tests détaillés de ce type relèvent généralement des tests d'intégration.

11
Robert Harvey