7.1 Annotazione @Suite
E alcune annotazioni usate più di frequente. Anche se non li usi, vedrai sicuramente i test con loro. Pertanto, è necessario comprendere almeno in termini generali ciò che è scritto lì.
I test possono essere combinati in gruppi. C'è un'annotazione speciale per questo @Suite
. Esempio:
@Suite
@SuiteDisplayName("JUnit Platform Suite Demo")
@SelectPackages("com.codegym.test")
@IncludeClassNamePatterns(".*Tests")
class SuiteDemo {
}
In questo caso, l'annotazione @Suite è abbinata ad altre annotazioni.
SuiteDisplayName
– imposta il nome del gruppo di test nel log;SelectPackages
- imposta la lista dei pacchetti dove cercare le classi di test;IncludeClassNamePatterns
– imposta lo schema dei nomi delle classi di test.
Perché tali difficoltà? Bene, immagina che tutti i test del progetto vengano eseguiti, diciamo, 50 ore. E eseguirli dopo ogni commit è molto costoso. In tal caso, è utile creare alcuni script di test separati e impostare i test in modo molto più flessibile.
7.2 Annotazione @Order
Un'altra annotazione comune è @TestMethodOrder
. Consente di specificare l'ordine in cui i metodi di test vengono chiamati nella classe di test. Può essere molto utile quando sai che le chiamate di metodo si influenzano a vicenda, ma in un certo ordine, tutto dovrebbe funzionare come dovrebbe. Usato abbastanza spesso.
Innanzitutto, puoi impostare i metodi da chiamare in ordine alfabetico :
@TestMethodOrder(MethodOrderer.MethodName.class)
public class AlphanumericOrderUnitTest {
}
In secondo luogo, ogni metodo può avere un'annotazione speciale con il suo numero ordinale.
@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {
@Test
@Order(1)
public void firstTest() {
}
@Test
@Order(2)
public void secondTest() {
}
}
O anche creare una classe separata che specificherà l'ordine in cui vengono chiamati i test:
@TestMethodOrder(CustomOrder.class)
public class CustomOrderUnitTest {
}
//sort method names alphabetically, but ignoring case
public class CustomOrder implements MethodOrderer {
public void orderMethods(MethodOrdererContext context) {
context.getMethodDescriptors().sort(
(MethodDescriptor m1, MethodDescriptor m2)->
m1.getMethod().getName().compareToIgnoreCase(m2.getMethod().getName()));
}
}
7.3 Annotazione @DisplayName
Infine, a ciascun test può essere assegnato un nome. Può essere conveniente se ci sono molti test e crei scenari speciali (sottoinsiemi) di test. C'è un'annotazione speciale per questo @DisplayName
.
Esempio:
@DisplayName("Friendly name for the test")
public class DisplayNameCustomTest {
@Test
@DisplayName("Input Validation")
void inputData() {
}
@DisplayName("Checking critical situations")
@Test
void criticalCases() {
}
}
Come nel caso dell'impostazione dell'ordine dei test, qui è possibile creare un metodo speciale che genererà i nomi dei test e dei metodi di test. Esempio:
@DisplayNameGeneration(DisplayNameGeneratorUnitTest.ReplaceCamelCase.class)
class DisplayNameGeneratorUnitTest {
@Test
void camelCaseName() {
}
static class ReplaceCamelCase extends DisplayNameGenerator.Standard {
@Override
public String generateDisplayNameForClass(Class testClass) {
return super.generateDisplayNameForClass(testClass).toUpperCase();
}
}
}
Guarda com'è facile :)
GO TO FULL VERSION