JUnit'te @Before ve @After Ek Açıklamaları Nasıl Kullanılır

JUnit'te @Before ve @After Ek Açıklamaları Nasıl Kullanılır

Bir birim test takımı yazarken, gerçekleştirmeniz gereken testle ilgili olmayan bazı etkinlikler olabilir. Bu faaliyetler herhangi bir biçimde olabilir. Test yapmadan önce bir veritabanına bağlanmanız veya kaynakları toplamanız gerekebilir. Her test senaryosu yürütüldükten sonra bazı kaynakları serbest bırakmanız gerekebilir.





GÜNÜN YAPILAN VİDEOSU

Testle ilgili olmayan bu etkinliklerden herhangi birini birim test sınıfının kapsamı dışında gerçekleştirmek imkansız değilse de sıkıcı olabilir. Test sınıfınızın başarılı bir şekilde yürütülmesi bu faaliyetlere bağlı olabilir, bu nedenle JUnit bu sorunu çözmek için iki çift açıklama sağlar.





@BeforeAll Açıklaması

Bir JUnit test sınıfı, bir veya daha fazla test yöntemine sahip olabilir. @BeforeAll ek açıklaması, belirli bir yöntemin bir test sınıfındaki tüm test yöntemlerinden önce yürütülmesi gerektiğini bildirir. Bu ek açıklamayla ilişkili yöntem, test sınıfındaki test yöntemlerinin sayısından bağımsız olarak yalnızca bir kez (testin başlangıcında) yürütülür.





@BeforeAll ek açıklamasını kullanan herhangi bir yöntem birkaç koşula uymalıdır. Bu yöntemler geçersiz bir dönüş tipine sahip olmalı, genel olmalı ve özel olmamalıdır. @BeforeAll ek açıklaması, bir bir veritabanına bağlantı veya yeni bir dosya oluşturma. Bu makale, @BeforeAll ek açıklamasını nasıl kullanabileceğinizi göstermek için bir hesap makinesi test sınıfı kullanır.

Hesap Makinesi Sınıfı

package com.app; 
public class Calculator {
public static int add(int num1, int num2) {
return num1 + num2;
}
public static int subtract(int num1, int num2) {
return num1 - num2;
}
public static int multiply(int num1, int num2) {
return num1 * num2;
}
public static int divide(int num1, int num2) {
return num1 / num2;
}
}

Hesap MakinesiTest Sınıfı

import static org.junit.jupiter.api.Assertions.*; 
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;

@DisplayName("Test class demonstrating how to use the before and after annotations.")
class CalculatorTest {
@BeforeAll
public static void powerOnCalculator() {
System.out.println("The calculator is on");
}

@Test
@DisplayName("Testing method that adds two integer values.")
public void testAdd() {
assertEquals(7, Calculator.add(3, 4));
}

@Test
@DisplayName("Testing method that subtracts one integer value from another.")
public void testSubtract() {
assertEquals(6, Calculator.subtract(9, 3));
}

@Test
@DisplayName("Testing method that multiplies two integer values")
public void testMultiply() {
assertEquals(10, Calculator.multiply(5, 2));
}

@Test
@DisplayName("Testing method that divides one integer value by another")
public void testDivide() {
assertEquals(2, Calculator.divide(4, 2));
}
}

Bu sınıfta, @BeforeAll notu, herhangi bir test çalıştırmasından önce 'Hesap makinesi açık' yazan powerOnCalculator() yöntemiyle çalışır. Başarılı test yürütme, aşağıdaki test raporunu yazdırır:



En iyi 10 çapraz platform çok oyunculu mobil oyun
  BeforeAll ek açıklama raporu

Gördüğünüz gibi @BeforeAll ek açıklamasıyla ilişkili yöntem test raporunda görünmüyor. Ancak @BeforeAll açıklama yönteminde bir hata varsa, test raporu sonuçları bunu bir başarısızlıkla gösterecektir.

@BeforeEach Açıklaması

@BeforeAll açıklamalı yöntemi gibi, @BeforeEach açıklamalı yöntemi de test raporunda görünmez. @BeforeEach açıklamalı yöntem, bir test sınıfındaki her test yönteminden önce yürütülür. Bu nedenle, bir test sınıfı iki test yöntemi içeriyorsa, @BeforeEach ek açıklaması iki kez yürütülür.





import static org.junit.jupiter.api.Assertions.*; 
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@DisplayName("Test class demonstrating how to use the before and after annotations.")
class CalculatorTest {
@BeforeAll
public static void powerOnCalculator() {
System.out.println("The calculator is on");
}
@BeforeEach
public void clearCalculator() {
System.out.println("The calculator is ready");
}
@Test
@DisplayName("Testing method that adds two integer values.")
public void testAdd() {
assertEquals(7, Calculator.add(3, 4));
}
@Test
@DisplayName("Testing method that subtracts one integer value from another.")
public void testSubtract() {
assertEquals(6, Calculator.subtract(9, 3));
}
@Test
@DisplayName("Testing method that multiplies two integer values")
public void testMultiply() {
assertEquals(10, Calculator.multiply(5, 2));
}
@Test
@DisplayName("Testing method that divides one integer value by another")
public void testDivide() {
assertEquals(2, Calculator.divide(4, 2));
}
}

CalculatorTest sınıfına @BeforeEach notunun eklenmesi aşağıdaki çıktıyı üretir:

  BeforeEach açıklama çıktısı

@BeforeEach notuyla ilişkili yöntem, her test yönteminden önce bir kez olmak üzere dört kez yürütülür. @BeforeEach yönteminin statik olmadığını, geçersiz bir dönüş türüne sahip olduğunu ve bunlar zorunlu koşullar olduğundan özel olmadığını unutmayın. @BeforeEach ek açıklamasıyla ilişkili yöntemin @BeforeAll yönteminden sonra çalıştığını da belirtmek önemlidir.





@AfterAll Açıklaması

@AfterAll Annotation içeren bir yöntem, test sınıfındaki tüm test yöntemleri yürütmelerini tamamladıktan sonra yürütülür. @AfterAll ek açıklaması aşağıdakiler için idealdir: temel dosya işlemleri , bir dosyayı kapatmak veya bir veritabanından bağlantıyı kesmek gibi. @AfterAll ek açıklaması, @BeforeAll ek açıklamasının karşılığıdır. @BeforeAll ek açıklaması gibi, @AfterAll ek açıklaması statik olmalı, void döndürmeli ve çoğu özel olmamalıdır.

12443EFD11801131761D35928B853D3936477DBCB

@AfterAll açıklamalı yöntemi mevcut CalculatorTest sınıfına eklemek, konsola aşağıdaki çıktıyı yazdırır:

  AfterAll ek açıklama çıktısı

@AfterAll ek açıklamasını kullanan powerOffCalculator() yönteminin, tüm test yöntemleri yürütüldükten sonra test sınıfının sonunda yazdırıldığını unutmayın.

@AfterEach Açıklaması

@AfterEach notu, @BeforeEach notunun karşılığıdır. @BeforeAll ve @AfterAll ek açıklamalarından biraz farklı olan aynı zorunlu koşullara sahiptirler. @AfterEach ek açıklamasını @BeforeEach ek açıklamasından (adları dışında) ayıran şey, @AfterEach yönteminin her test yönteminden sonra çalışmasıdır.

@AfterEach 
public void returnResults() {
System.out.println("The results are ready");
}

CalculatorTest sınıfının yürütülmesi konsola aşağıdaki çıktıyı yazdırır:

Windows 10'un ne kadar alana ihtiyacı var?
  AfterEach açıklama çıktısı

Çıktı, @AfterEach ek açıklamasıyla (returnResults) ilişkili yöntemin dört kez yazdırdığını gösterir. returnResults() yönteminin her yürütmesi, yalnızca her birim testinin yürütülmesinden sonra gerçekleşir. Bu, @BeforeEach ek açıklamasıyla ilişkili yöntemden gelen her çıktıdan sonra returnResults() yöntemi çıktısının görünmesi gerçeğiyle açıkça görülür.

Ek Açıklamaları Kullanarak Test Takımlarınızı Parlatın

JUnit, önce ve sonra çift açıklamalarını kullanarak testle ilgili olmayan işlemleri gerçekleştirmenize olanak tanır. Bu dört açıklama, testlerinize değer katan diğer birkaç açıklama listesine aittir. JUnit'in ek açıklamalarından bir diğeri @DisplayName'dir.

Tam CalculatorTest sınıfını görüntüleyen iki kod örneği, @DisplayName ek açıklamasını kullanır. @DisplayName ek açıklaması, test sınıflarınız ve test yöntemleriniz için daha anlamlı adlar oluşturmanıza yardımcı olur.