2017-10-02 2 views
0

J'ai un bloc de code qui ressemble à ceci:Remplacer les nouvelles lignes par " n" et doit-il être testable à l'unité?

String myJsonString = mapper.writeValueAsString(object).replaceAll("(\\r|\\n|\\r\\n)+", "\\\\n") + "\n"; 

Maintenant, ce code vit dans un bloc « appelable » - et en tant que tel, ne sert à rien en ce qui concerne les tests unitaires.

Je sais que je pourrais faire quelque chose dans le sens de tirer l'expression rationnelle dans une classe de modèle ... et puis faire correspondre de cette façon - mais je voulais obtenir des commentaires concernant la meilleure pratique ici - Je n'ai pas autant d'essais unitaires que je voudrais faire, et je sais qu'il y a toujours de meilleurs moyens de faire ces choses.

Le bloc réel de code, pour une meilleure référence

Callable<Boolean> doStuff = new Callable<Boolean>() { 
     public Boolean call() throws Exception { 
      String json = mapper.writeValueAsString(object).replaceAll("(\\r|\\n|\\r\\n)+", "\\\\n") + "\n"; 
      // TODO : Add functionality which adds this string to a list. 
      return true; 
     } 
    }; 
+1

Pourriez-vous partager un peu plus de contexte? L '"unité" testée unitairement est généralement une méthode entière. Est-ce une méthode en soi? Est-ce que cela fait partie d'une plus grande fonctionnalité? – Mureinik

+0

Hey @Mureinik, j'ai ajouté le code ci-dessus dans la question - Je n'ai pas besoin d'aide avec la partie TODO, où je vais l'ajouter à la liste, j'ai juste besoin de savoir comment je pourrais tester le remplacement code, avec le regex etc ... comment je pourrais décomposer cela en classe et être capable de le tester, par exemple. – MickeyThreeSheds

+1

Pensez à utiliser '\\ R', introduit avec Java 8 et signifiant« toute nouvelle séquence de lignes dans n'importe quel système d'exploitation »comme regex. – Bohemian

Répondre

1

Pause le code dans un (testable) Méthode:

Callable<Boolean> doStuff = new Callable<Boolean>() { 
    public Boolean call() throws Exception { 
     String json = escapeNewlines(mapper.writeValueAsString(object)) + "\n"; 
     // TODO : Add functionality which adds this string to a list. 
     return true; 
    } 
}; 

// Unit test this utility method 
public static String escapeNewlines(String str) { 
    return str.replaceAll("\\R+", "\\\\n"); // Note use of \R 
} 
+0

Je pense qu'il veut vraiment le code de test unitaire. Quelque chose comme une méthode qui appelle sa méthode avec des prédicats/assertions pour vérifier si l'expression régulière va se casser ou non, même si je peux me tromper ... Ce n'est pas très clair ... –