3.1 Annoteringer @BeforeEach, @AfterEach
Bemærk, at vi i det foregående eksempel i hver metode skulle skrive kode for at skabe et objektlommeregner.
Dette er selvfølgelig kun én linje, men hvis vi tester rigtige systemer, vil vi ofte have en situation, hvor vi skal oprette og konfigurere flere objekter, som kan tage flere dusin linjer kode. Eksempel:
//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 eksemplet ovenfor har vi oprettet og konfigureret et objektHttpClientog ønsker at teste send() metoden .
Så hver gang i testmetoden ikke at skrive oprettelsen af et objektHttpClient, kan den flyttes til en separat metode og få en speciel @BeforeEach annotation . Så vil Junit kalde denne metode før hver testmetode. Eksempel:
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 også oprette en speciel metode, der vil blive kaldt hver gang efter næste testmetode, og rydde op i de brugte ressourcer , skrive noget til loggen osv. En sådan metode skal markeres med @AfterEach annotationen .
Hvis du har 3 testmetoder test1() , test2() og test3() , vil opkaldsordren være:
- før hver metode
- test1()
- Efter hver metode
- før hver metode
- test2()
- Efter hver metode
- før hver metode
- test3()
- Efter hver metode
3.2 Annoteringer @BeforeAll, @AfterAll
JUnit giver dig også mulighed for at tilføje en metode, der vil blive kaldt én gang før alle testmetoder . Sådan en metode bør annoteres med @BeforeAll . Den har også en parret @AfterAll- annotation . Metoden markeret med det vil blive kaldt af JUnit efter alle testmetoder.
Lad os skrive et særligt eksempel, der giver dig mulighed for bedre at forstå, hvordan det hele fungerer. Lad os tage test af vores lommeregner som grundlag:
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");
}
}
Denne test udskriver følgende tekst til konsollen:
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