Dans une classe de test, je voudrais fournir ma propre surcharge de assertEquals
avec une logique spéciale ne comptant pas sur Object.equals
. Malheureusement, cela ne fonctionne pas car dès que je déclare ma méthode assertEquals
en local, Java ne trouve plus l'importation statique de org.junit.Assert.*
.Surcharge statiques importations
Y a-t-il un moyen de contourner cela? C'est à dire. existe-t-il un moyen de fournir une surcharge supplémentaire à une méthode importée statiquement? (La solution plutôt évidente étant de nommer différemment la méthode, mais cette solution n'a pas le même attrait esthétique.)
Mon fichier de classe de test ressemble à quelque chose comme ceci:
package org.foo.bar;
import static org.junit.Assert.*;
import org.junit.Test;
public class BarTest {
private static void assertEquals(Bar expected, Bar other) {
// Some custom logic to test equality.
}
@Test
public void testGetFoo() throws Exception {
Bar a = new Bar();
assertEquals(42, a.getFoo()); // Error *
}
@Test
public void testCopyConstructor() throws Exception {
Bar a = new Bar();
// Fill a.
Bar b = new Bar(a);
assertEquals(a, b);
}
}
Error *
est « La méthode assertEquals(Bar, Bar)
dans le type BarTest
n'est pas applicable pour les arguments (int, int)
. "
Quel est le type de retour de getFoo() dans la classe Bar - int ou autre? –
Peu importe, compris que c'était int via le message d'erreur. –
Ce n'est pas une réponse directe, mais je mettrais vraiment en doute votre motivation pour ce faire, l '"appel esthétique" comme vous le dites. Si je suis un développeur qui lit un test unitaire, je veux que assertEquals soit toujours l'implémentation de JUnit. En utilisant la méthode assertBarEquals est beaucoup plus communicative à mon avis. C'est une question valide, et je pourrais voir comment cela pourrait être utile dans d'autres situations, je ne crois tout simplement pas qu'un autre moyen bat assertBarEquals(). – Grundlefleck