3.1 Annotációk @BeforeEach, @AfterEach
Vegye figyelembe, hogy az előző példában minden metódusban kódot kellett írnunk egy objektum létrehozásáhozszámológép.
Természetesen ez csak egy sor, de ha valódi rendszereket tesztelünk, gyakran lesz olyan helyzetünk, amikor több objektumot kell létrehoznunk és konfigurálnunk, ami több tucat sornyi kódot is igénybe vehet. Példa:
//Create an HttpClient object
HttpClient client = HttpClient.newBuilder()
.version(Version.HTTP_1_1)
.followRedirects(Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(20))
.proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
.authenticator(Authenticator.getDefault())
.build();
//Create an HttpRequest object
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.headers("Content-Type", " application/octet-stream")
.POST( HttpRequest.BodyPublishers. ofInputStream ( () -> is; ))
.build();
//Call the send() method
HttpResponse response = client.send(request, BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
A fenti példában létrehoztunk és konfiguráltunk egy objektumotHttpClientés szeretné tesztelni a send() metódust .
Annak érdekében, hogy minden alkalommal a vizsgálati módszerben ne írjon egy objektum létrehozásátHttpClient, áthelyezhető egy külön metódusba, és külön @BeforeEach megjegyzést kaphat . Ekkor a Junit minden vizsgálati módszer előtt meghívja ezt a módszert. Példa:
class HttpClientTest {
public HttpClient client;
@BeforeEach
public void init(){
client = HttpClient.newBuilder()
.version(Version.HTTP_1_1)
.followRedirects(Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(20))
.proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
.authenticator(Authenticator.getDefault())
.build();
}
@Test
public void send200() throws Exception {
//Create an HttpRequest() object
HttpRequest request = HttpRequest.newBuilder(new URI("https://codegym.cc")).build();
//Call the send() method
HttpResponse response = client.send(request, BodyHandlers.ofString());
assertEquals(200, response.statusCode());
}
@Test
public void send404() throws Exception {
//Create an HttpRequest() object
HttpRequest request = HttpRequest.newBuilder(new URI("https://codegym.cc/unknown")).build();
//Call the send() method
HttpResponse response = client.send(request, BodyHandlers.ofString());
assertEquals(404, response.statusCode());
}
}
Létrehozhat egy speciális metódust is, amely minden alkalommal meghívódik a következő tesztmetódus után, és megtisztítja a felhasznált erőforrásokat , írhat valamit a naplóba stb. Az ilyen metódusokat meg kell jelölni az @AfterEach annotációval .
Ha 3 tesztmódszerrel rendelkezik test1() , test2() és test3() , akkor a hívási sorrend a következő lesz:
- Minden módszer előtt
- teszt1()
- Minden módszer után
- Minden módszer előtt
- teszt2()
- Minden módszer után
- Minden módszer előtt
- teszt3()
- Minden módszer után
3.2 Annotációk @Minden előtt, @AfterAll
A JUnit lehetővé teszi egy olyan módszer hozzáadását is, amely az összes tesztmódszer előtt egyszer kerül meghívásra . Az ilyen metódust @BeforeAll megjegyzéssel kell ellátni . Páros @AfterAll annotációval is rendelkezik . A vele jelölt módszert a JUnit minden vizsgálati módszer után meghívja.
Írjunk egy speciális példát, amely lehetővé teszi, hogy jobban megértse, hogyan működik az egész. Vegyük a kalkulátorunk tesztelését alapul:
class CalculatorTest {
private Calculator calc = new Calculator();
@BeforeAll
public static void init(){
System.out.println("BeforeAll init() method called");
}
@BeforeEach
public void initEach(){
System.out.println("BeforeEach initEach() method called");
}
@Test
public void add(){
System.out.println("Testing Addition");
}
@Test
public void sub() {
System.out.println("Testing Subtraction");
}
@Test
public void mul(){
System.out.println("Testing Multiplication");
}
@Test
public void div() {
System.out.println("Testing Division");
}
}
Ez a teszt a következő szöveget nyomtatja ki a konzolra:
BeforeAll init() method called
BeforeEach initEach() method called
Testing Addition
BeforeEach initEach() method called
Testing Subtraction
BeforeEach initEach() method called
Testing Multiplication
BeforeEach initEach() method called
Testing Division
GO TO FULL VERSION