3.1 Anteckningar @BeforeEach, @AfterEach
Observera att i föregående exempel, i varje metod var vi tvungna att skriva kod för att skapa ett objektkalkylator.
Naturligtvis är detta bara en rad, men om vi testar riktiga system kommer vi ofta att ha en situation där vi behöver skapa och konfigurera flera objekt, vilket kan ta flera dussin rader kod. Exempel:
//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());
I exemplet ovan har vi skapat och konfigurerat ett objektHttpClientoch vill testa metoden send() .
Så att varje gång i testmetoden att inte skriva skapandet av ett objektHttpClient, kan den flyttas till en separat metod och ges en speciell @BeforeEach- anteckning . Sedan kommer Junit att anropa denna metod före varje testmetod. Exempel:
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());
}
}
Du kan också skapa en speciell metod som kommer att anropas varje gång efter nästa testmetod, och rensa upp de använda resurserna , skriva något till loggen etc. En sådan metod måste markeras med @ AfterEach -kommentaren .
Om du har tre testmetoder test1() , test2() och test3() , kommer anropsordern att vara:
- före varje metod
- test1()
- Efter varje metod
- före varje metod
- test2()
- Efter varje metod
- före varje metod
- test3()
- Efter varje metod
3.2 Anteckningar @BeforeAll, @AfterAll
JUnit låter dig också lägga till en metod som kommer att anropas en gång före alla testmetoder . En sådan metod bör noteras med @BeforeAll . Den har också en parad @AfterAll- anteckning . Metoden märkt med den kommer att anropas av JUnit efter alla testmetoder.
Låt oss skriva ett speciellt exempel som gör att du bättre kan förstå hur det hela fungerar. Låt oss ta testning av vår kalkylator som grund:
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");
}
}
Detta test kommer att skriva ut följande text till konsolen:
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