3.1 Mga Anotasyon @BeforeEach, @AfterEach
Tandaan na sa nakaraang halimbawa, sa bawat pamamaraan kailangan naming magsulat ng code upang lumikha ng isang bagaycalculator.
Siyempre, ito ay isang linya lamang, ngunit kung susuriin natin ang mga totoong system, madalas tayong magkakaroon ng sitwasyon kung saan kailangan nating gumawa at mag-configure ng ilang bagay, na maaaring tumagal ng ilang dosenang linya ng code. Halimbawa:
//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());
Sa halimbawa sa itaas, gumawa at nag-configure kami ng isang bagayHttpClientat gustong subukan ang send() method .
Kaya na sa bawat oras sa pagsubok na paraan hindi upang isulat ang paglikha ng isang bagayHttpClient, maaari itong ilipat sa isang hiwalay na paraan at bigyan ng espesyal na @BeforeEach annotation . Pagkatapos ay tatawagin ni Junit ang pamamaraang ito bago ang bawat pamamaraan ng pagsubok. Halimbawa:
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());
}
}
Maaari ka ring lumikha ng isang espesyal na paraan na tatawagin sa bawat oras pagkatapos ng susunod na paraan ng pagsubok, at linisin ang mga ginamit na mapagkukunan , magsulat ng isang bagay sa log, atbp. Ang ganitong paraan ay dapat na minarkahan ng @AfterEach annotation .
Kung mayroon kang 3 paraan ng pagsubok test1() , test2() at test3() , ang order ng tawag ay:
- bago ang bawat pamamaraan
- pagsubok1()
- Pagkatapos ng bawat pamamaraan
- bago ang bawat pamamaraan
- pagsubok2()
- Pagkatapos ng bawat pamamaraan
- bago ang bawat pamamaraan
- pagsubok3()
- Pagkatapos ng bawat pamamaraan
3.2 Anotasyon @BeforeAll, @AfterAll
Pinapayagan ka rin ng JUnit na magdagdag ng isang paraan na tatawagin nang isang beses bago ang lahat ng mga pamamaraan ng pagsubok . Ang ganitong paraan ay dapat i-annotate sa @BeforeAll . Mayroon din itong ipinares na @AfterAll annotation . Ang pamamaraang minarkahan nito ay tatawagin ng JUnit pagkatapos ng lahat ng mga pamamaraan ng pagsubok.
Sumulat tayo ng isang espesyal na halimbawa na nagbibigay-daan sa iyong mas maunawaan kung paano gumagana ang lahat. Kunin natin ang pagsubok sa ating calculator bilang batayan:
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");
}
}
Ipi-print ng pagsubok na ito ang sumusunod na text sa 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