Vous pouvez créer n'importe quel type de vos propres assertions basées sur les assertions de junit, car celles-ci sont spécialement conçues pour créer des assertions définies par l'utilisateur et destinées à fonctionner exactement comme celles de junit :
static void assertDoesNotThrow(Executable executable) {
assertDoesNotThrow(executable, "must not throw");
}
static void assertDoesNotThrow(Executable executable, String message) {
try {
executable.execute();
} catch (Throwable err) {
fail(message);
}
}
Testons maintenant le soi-disant scénario méthodeMustNotThrow et de consigner tous les échecs dans un style junit :
//test and log with default and custom messages
//the following will succeed
assertDoesNotThrow(()->methodMustNotThrow(1));
assertDoesNotThrow(()->methodMustNotThrow(1), "custom facepalm");
//the following will fail
assertDoesNotThrow(()->methodMustNotThrow(2));
assertDoesNotThrow(()-> {throw new Exception("Hello world");}, "message");
//See implementation of methodMustNotThrow below
D'une manière générale, il est possible de faire échouer instantanément n'importe quel test dans n'importe quel scénario, à n'importe quel endroit où cela a un sens, en appelant fail(someMessage)
qui est conçu exactement dans ce but. Par exemple, utilisez-le dans un bloc try/catch pour échouer si quelque chose est lancé dans le scénario de test :
try{methodMustNotThrow(1);}catch(Throwable e){fail("must not throw");}
try{methodMustNotThrow(1);}catch(Throwable e){Assertions.fail("must not throw");}
C'est l'échantillon de la méthode que nous testons, en supposant que nous ayons une telle méthode qui ne doit pas échouer dans des circonstances spécifiques, mais elle peut échouer :
void methodMustNotThrow(int x) throws Exception {
if (x == 1) return;
throw new Exception();
}
La méthode ci-dessus est un exemple simple. Mais cela fonctionne pour des situations complexes, où l'échec n'est pas si évident. Il y a les importations :
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.function.Executable;
import static org.junit.jupiter.api.Assertions.*;
14 votes
Un test JUnit est considéré comme ayant échoué s'il lève une exception autre qu'une exception attendue. En général, aucune exception n'est attendue.
2 votes
N'y a-t-il pas une distinction entre échec et erreur dans JUnit ? Le premier signifie que le test a échoué, le second que quelque chose d'inattendu s'est produit.
2 votes
Duplicata possible de Comment puis-je tester si une exception particulière n'est pas levée ?