Question

J'essaie d'écrire des scénarios de test pour certaines classes impliquant le test de l'égalité des tableaux de données à deux dimensions. Voici ma première tentative:

double[][] expected = {
        {0, 104, 0},
        {145.5, 0, 0},
        {83, 0, 0}
};

double[][] actual = someObject.getArray();

Maintenant, je vois que JUnit n’a pas de "arrayEquals" pour les doubles tableaux, probablement à cause du problème de virgule flottante (vous voulez vraiment utiliser un delta vs égalité). Je remarque que Junit-Addons a exactement la méthode que je dois déterminer si elles sont égales:

static void  assertEquals(java.lang.String message, double[] expected, double[] actual, double delta) 

Maintenant, tout va bien. Ce que je veux être capable de faire est de donner un message d'erreur significatif, pas seulement dire que les deux sont inégaux, mais ils sont inégaux. Existe-t-il un moyen simple de procéder ainsi, sans comparer les dimensions, puis parcourir chaque élément correspondant et tester l’égalité? Cela semble idiot de devoir faire la même chose que dans l'assertion, juste pour obtenir un message d'erreur significatif.

Était-ce utile?

La solution

Je pense que vous confondez les tests unitaires avec l’instrumentation / débogage. Le test unitaire a pour but de déterminer si votre objet fonctionne comme prévu. Si vous prenez l’habitude d’inclure du code qui constitue (effectivement) une instrumentation dans vos scénarios de test, vous augmentez la probabilité que vous écriviez des scénarios de test conçus pour réussir.

Votre objet a une méthode qui consiste à renvoyer un double [] [] . Votre scénario de test vous indique qu'il ne fonctionne pas comme prévu. Il est temps de déboguer votre code.

(Je comprends que cela pourrait être un point de vue controversé.)

Autres conseils

Alors, essayez-vous de comparer les doubles [] s ou les doubles [] [] s?

Si vous comparez double [] s (tableaux 1D), alors, que diriez-vous d'utiliser Junit-Addons? le message d'erreur par défaut n'est-il pas ce dont vous avez besoin? Si vous êtes capable d'écrire vos tests pour utiliser Double [] à la place, la méthode assertArraysEquals () de JUnit, qui opère sur Object [], fonctionnera. Il comparera cependant les doubles pour une égalité exacte - en supposant que ce soit ce que vous souhaitez.

Si vous comparez double [] [], aucune de ces méthodes ne fonctionne. Même si double [] [] est un objet [], vous n'avez pas l'intention de comparer des doubles [] s individuels, car ils n'utilisent que l'égalité de référence.

Vous pouvez utiliser commons-lang pour effectuer la comparaison, c'est vrai, bien que cela ne vous aidera pas à générer un message utile sur la différence. Pour cela, je pense que vous devez utiliser votre propre méthode.

Est-ce que je comprends bien, vous êtes satisfait de la méthode assertEquals (String, double [], double [], double) de JUnit-Addons, à l'exception de la sortie?

En supposant que vous ayez ou pouvez obtenir le source de la classe ArrayAssert, réimplémentez simplement la méthode (copier-coller, mais vérifiez d'abord la licence) et améliorez les sorties de la nouvelle méthode assertEquals personnalisée. Je pense que ça ne prendra pas longtemps!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top