3.1 Adnotări @BeforeEach, @AfterEach
Rețineți că în exemplul anterior, în fiecare metodă a trebuit să scriem cod pentru a crea un obiectcalculator.
Desigur, aceasta este doar o linie, dar dacă testăm sisteme reale, vom avea adesea o situație în care trebuie să creăm și să configuram mai multe obiecte, care pot lua câteva zeci de linii de cod. Exemplu:
//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());
În exemplul de mai sus, am creat și configurat un obiectHttpClientși doriți să testați metoda send() .
Astfel încât de fiecare dată în metoda de testare să nu scrie creația unui obiectHttpClient, poate fi mutat într-o metodă separată și poate fi dat o adnotare specială @BeforeEach . Apoi Junit va apela această metodă înainte de fiecare metodă de testare. Exemplu:
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());
}
}
De asemenea, puteți crea o metodă specială care va fi apelată de fiecare dată după următoarea metodă de testare și curățați resursele utilizate , scrieți ceva în jurnal etc. O astfel de metodă trebuie să fie marcată cu adnotarea @AfterEach .
Dacă aveți 3 metode de testare test1() , test2() și test3() , atunci ordinea apelurilor va fi:
- înainteFiecare metodă
- test1()
- După fiecare metodă
- înainteFiecare metodă
- test2()
- După fiecare metodă
- înainteFiecare metodă
- test3()
- După fiecare metodă
3.2 Adnotări @BeforeAll, @AfterAll
JUnit vă permite, de asemenea, să adăugați o metodă care va fi apelată o dată înaintea tuturor metodelor de testare . O astfel de metodă ar trebui adnotată cu @BeforeAll . Are, de asemenea, o adnotare @AfterAll asociată . Metoda marcată cu aceasta va fi apelată de JUnit după toate metodele de testare.
Să scriem un exemplu special care vă permite să înțelegeți mai bine cum funcționează totul. Să luăm ca bază testarea calculatorului nostru:
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");
}
}
Acest test va imprima următorul text pe consolă:
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