Dans mon cas de test, j'obtiens une valeur entière:
int val = getXXX();
Ensuite, je voudrais vérifier si val
est égal à 3 ou égal à 5, ce qui est OK dans les deux cas. J'ai donc fait:
assertTrue(val == 3 || val==5);
J'exécute mon test, le journal affiche val
est 5, mais mon code d'assertion ci-dessus a échoué avec AssertionFailedError. Il semble que je ne puisse pas utiliser assertTrue(...)
de cette façon, alors, comment vérifier la condition OR?
ive a essayé d'écrire un test rapide:
@Test
public void testName() {
int i = 5;
junit.framework.Assert.assertTrue(i == 3 || i == 5);
}
son passage toujours donc je suppose qu'il y a du code intermédiaire lorsque votre valeur est modifiée. Vous pouvez utiliser
org.junit.Assert.assertEquals(5, i);
pour vérifier la valeur - cette assertion imprimera de belles informations ce qui ne va pas, par exemple:
Java.lang.AssertionError:
Expected :4
Actual :5
Vous pouvez utiliser Hamcrest matchers pour obtenir un message d'erreur plus clair ici:
int i = 2;
assertThat(i, Matchers.either(Matchers.is(3)).or(Matchers.is(5))
or
int i = 2;
assertThat(i, Matchers.anyOf(Matchers.is(3),Matchers.is(5)));
Cela expliquera plus clairement:
Expected: (is <3> or is <5>)
but: was <2>
montrant exactement l'attente et la valeur incorrecte qui a été fournie.
Bien que les analyseurs Harmcrest puissent faire le travail, ces constantes peuvent être facilement refactorisées en une constante plus significative, comme une liste de valeurs valides. Ensuite, vous pouvez utiliser la méthode contains
pour vérifier que la valeur est présente dans la liste - IMO est également plus facile à lire:
public class Foo {
public static final List<Integer> VALID_VALUES = Arrays.asList(3, 5);
}
@Test
public void testName() {
int i = 5;
Assert.assertTrue(Foo.VALID_VALUES.contains(i));
}
Dans mon cas, je voulais faire une logique d'assertion complexe, j'ai donc simplement implémenté une méthode qui renvoie un booléen et il a fait le travail, la façon dont il serait implémenté dans cet exemple est la suivante:
private Boolean is3or5(Integer val) {
if(val == 3 || val == 5) {
return true;
}
return false;
}
Ensuite, faites l'assertion:
assertTrue(is3or5(val));
Bien sûr, la méthode peut contenir une logique plus complexe si nécessaire