3.1 Annotaties @BeforeEach, @AfterEach
Merk op dat we in het vorige voorbeeld in elke methode code moesten schrijven om een object te makenrekenmachine.
Dit is natuurlijk maar één regel, maar als we echte systemen testen, zullen we vaak een situatie hebben waarin we verschillende objecten moeten maken en configureren, wat enkele tientallen regels code kan vergen. Voorbeeld:
//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());
In het bovenstaande voorbeeld hebben we een object gemaakt en geconfigureerdHttpClienten wil de methode send() testen .
Zodat elke keer in de testmethode niet de creatie van een object schrijftHttpClient, kan het naar een aparte methode worden verplaatst en een speciale @BeforeEach annotatie krijgen . Dan roept Junit deze methode voor elke testmethode aan. Voorbeeld:
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());
}
}
U kunt ook een speciale methode maken die elke keer wordt aangeroepen na de volgende testmethode, en de gebruikte bronnen opschonen , iets naar het logboek schrijven, enz. Een dergelijke methode moet worden gemarkeerd met de annotatie @AfterEach .
Als je 3 testmethodes test1() , test2() en test3() hebt , dan is de aanroepvolgorde:
- voorElke methode
- proef1()
- Na elke methode
- voorElke methode
- proef2()
- Na elke methode
- voorElke methode
- proef3()
- Na elke methode
3.2 Annotaties @BeforeAll, @AfterAll
Met JUnit kunt u ook een methode toevoegen die vóór alle testmethoden een keer wordt aangeroepen . Een dergelijke methode moet worden geannoteerd met @BeforeAll . Het heeft ook een gekoppelde @AfterAll- annotatie . De methode die ermee is gemarkeerd, wordt na alle testmethoden door JUnit aangeroepen.
Laten we een speciaal voorbeeld schrijven waarmee u beter kunt begrijpen hoe het allemaal werkt. Laten we het testen van onze rekenmachine als basis nemen:
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");
}
}
Deze test drukt de volgende tekst af naar de console:
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