JUnit میں @Before اور @After تشریحات کا استعمال کیسے کریں۔

JUnit میں @Before اور @After تشریحات کا استعمال کیسے کریں۔

جب آپ یونٹ ٹیسٹ سوٹ لکھ رہے ہوتے ہیں، تو کچھ غیر ٹیسٹ سے متعلق سرگرمیاں ہوسکتی ہیں جو آپ کو انجام دینے کی ضرورت ہوتی ہے۔ یہ سرگرمیاں کسی بھی شکل میں ہوسکتی ہیں۔ ٹیسٹ کرنے سے پہلے آپ کو ڈیٹا بیس سے جڑنے یا وسائل جمع کرنے کی ضرورت پڑسکتی ہے۔ ہر ٹیسٹ کیس کے مکمل ہونے کے بعد، آپ کو کچھ وسائل جاری کرنے کی ضرورت پڑ سکتی ہے۔





پرانے فلیٹ اسکرین مانیٹر کے ساتھ کیا کریں
دن کی ویڈیو کا میک یوز

یونٹ ٹیسٹ کلاس کے دائرہ کار سے باہر ان میں سے کسی بھی غیر ٹیسٹ سے متعلق سرگرمیوں کو انجام دینا اگر ناممکن نہیں تو مشکل ہو سکتا ہے۔ آپ کی ٹیسٹ کلاس کا کامیاب نفاذ ان سرگرمیوں پر منحصر ہو سکتا ہے، اس لیے JUnit اس مسئلے کو حل کرنے کے لیے تشریحات کے دو جوڑے فراہم کرتا ہے۔





The @BeforeAll تشریح

JUnit ٹیسٹ کلاس میں ایک یا زیادہ ٹیسٹ کے طریقے ہو سکتے ہیں۔ @BeforeAll تشریح اشارہ کرتی ہے کہ ایک مخصوص طریقہ کو ٹیسٹ کلاس میں تمام ٹیسٹ طریقوں سے پہلے عمل میں لانا چاہیے۔ اس تشریح سے وابستہ طریقہ ٹیسٹ کلاس میں ٹیسٹ کے طریقوں کی تعداد سے قطع نظر صرف ایک بار (ٹیسٹ کے آغاز پر) عمل میں لاتا ہے۔





کوئی بھی طریقہ جو @BeforeAll تشریح کا استعمال کرتا ہے اسے چند شرائط پر عمل کرنا چاہیے۔ ان طریقوں میں باطل واپسی کی قسم ہونی چاہیے، عوامی ہونا چاہیے، اور نجی نہیں ہونا چاہیے۔ @BeforeAll تشریح ایک قائم کرنے کے لیے مثالی ہے۔ ڈیٹا بیس سے کنکشن یا ایک نئی فائل بنانا۔ یہ مضمون یہ بتانے کے لیے کیلکولیٹر ٹیسٹ کلاس کا استعمال کرتا ہے کہ آپ @BeforeAll تشریح کیسے استعمال کر سکتے ہیں۔

کیلکولیٹر کلاس

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;
}
}

کیلکولیٹر ٹیسٹ کلاس

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));
}
}

اس کلاس میں، @BeforeAll تشریح powerOnCalculator() طریقہ کے ساتھ کام کرتی ہے، جو کسی بھی ٹیسٹ سے پہلے 'The Calculator is on' پرنٹ کرتا ہے۔ کامیاب ٹیسٹ پر عمل درآمد درج ذیل ٹیسٹ رپورٹ کو پرنٹ کرتا ہے:



  تمام تشریحی رپورٹ سے پہلے

جیسا کہ آپ دیکھ سکتے ہیں کہ @BeforeAll تشریح سے منسلک طریقہ ٹیسٹ رپورٹ میں ظاہر نہیں ہوتا ہے۔ تاہم، اگر @BeforeAll تشریح کے طریقہ کار میں کوئی خامی ہے، تو ٹیسٹ رپورٹ کے نتائج ناکامی کے ساتھ اس کی نشاندہی کریں گے۔

The @BeforeEach تشریح

@BeforeAll تشریح شدہ طریقہ کی طرح، @BeforeEach تشریح شدہ طریقہ ٹیسٹ رپورٹ میں ظاہر نہیں ہوگا۔ @BeforeEach تشریح شدہ طریقہ ٹیسٹ کلاس میں ہر ٹیسٹ کے طریقہ سے پہلے عمل میں آتا ہے۔ لہذا، اگر ٹیسٹ کلاس میں دو ٹیسٹ کے طریقے ہیں، تو @BeforeEach تشریح دو بار عمل میں آئے گی۔





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));
}
}

کیلکولیٹر ٹیسٹ کلاس میں @BeforeEach تشریح شامل کرنے سے درج ذیل آؤٹ پٹ پیدا ہوتا ہے:

وائرلیس ہیڈسیٹ کو ایکس بکس ون سے کیسے جوڑیں۔
  ہر تشریح آؤٹ پٹ سے پہلے

@BeforeEach تشریح سے وابستہ طریقہ چار بار، ہر ٹیسٹ کے طریقہ کار سے پہلے ایک بار چلتا ہے۔ آپ کو نوٹ کرنا چاہیے کہ @BeforeEach طریقہ جامد نہیں ہے، اس کی واپسی کی باطل قسم ہے، اور یہ نجی نہیں ہے، کیونکہ یہ لازمی شرائط ہیں۔ یہ نوٹ کرنا بھی ضروری ہے کہ @BeforeEach تشریح سے وابستہ طریقہ @BeforeAll طریقہ کے بعد چلتا ہے۔





The @AfterAll تشریح

@AfterAll تشریح کے ساتھ ایک طریقہ ٹیسٹ کلاس میں تمام ٹیسٹ طریقوں کے مکمل ہونے کے بعد عمل میں آئے گا۔ @AfterAll تشریح اس کے لیے مثالی ہے۔ بنیادی فائل آپریشنز ، جیسے فائل کو بند کرنا، یا ڈیٹا بیس سے منقطع کرنا۔ @AfterAll تشریح @BeforeAll تشریح کا ہم منصب ہے۔ @BeforeAll تشریح کی طرح، @AfterAll تشریح کو جامد ہونا چاہیے، باطل واپس آنا چاہیے، اور زیادہ تر نجی نہیں ہونا چاہیے۔

@AfterAll 
public static void powerOffCalculator() {
System.out.println("The calculator is off");
}

موجودہ کیلکولیٹر ٹیسٹ کلاس میں @AfterAll تشریح شدہ طریقہ شامل کرنے سے کنسول میں درج ذیل آؤٹ پٹ پرنٹ ہوتا ہے۔

  آفٹر آل تشریح آؤٹ پٹ

نوٹ کریں کہ powerOffCalculator() طریقہ، جو @AfterAll تشریح کا استعمال کرتا ہے، ٹیسٹ کلاس کے اختتام پر پرنٹ کرتا ہے، تمام ٹیسٹ کے طریقوں کے مکمل ہونے کے بعد۔

The @AfterEach تشریح

@AfterEach تشریح @BeforeEach تشریح کا ہم منصب ہے۔ ان کے پاس وہی لازمی شرائط ہیں، جو @BeforeAll اور @AfterAll تشریحات سے قدرے مختلف ہیں۔ @AfterEach تشریح کو @BeforeEach تشریح (ان کے ناموں کے علاوہ) سے جو چیز ممتاز کرتی ہے وہ یہ ہے کہ @AfterEach طریقہ ہر ٹیسٹ کے طریقہ کے بعد چلتا ہے۔

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

کیلکولیٹر ٹیسٹ کلاس کو انجام دینے سے کنسول پر درج ذیل آؤٹ پٹ پرنٹ ہوتا ہے۔

  ہر تشریح آؤٹ پٹ کے بعد

آؤٹ پٹ سے پتہ چلتا ہے کہ @AfterEach تشریح (returnResults) سے وابستہ طریقہ چار بار پرنٹ کرتا ہے۔ returnResults() طریقہ کا ہر عمل صرف ہر یونٹ ٹیسٹ کے عمل کے بعد ہوتا ہے۔ یہ اس حقیقت سے واضح ہے کہ @BeforeEach تشریح سے وابستہ طریقہ سے ہر آؤٹ پٹ کے بعد returnResults() طریقہ آؤٹ پٹ ظاہر ہوتا ہے۔

ونڈوز 10 فائل کی قسم کے لیے آئیکن کو تبدیل کریں۔

تشریحات کا استعمال کرتے ہوئے اپنے ٹیسٹ سویٹس کو پالش کریں۔

JUnit آپ کو جوڑی تشریحات سے پہلے اور بعد میں استعمال کرتے ہوئے غیر ٹیسٹ سے متعلق عمل کو سنبھالنے کی اجازت دیتا ہے۔ یہ چار تشریحات کئی دیگر تشریحات کی فہرست سے تعلق رکھتی ہیں جو آپ کے ٹیسٹوں کی قدر میں اضافہ کرتی ہیں۔ JUnit کی ایک اور تشریح @DisplayName ہے۔

کوڈ کی دو مثالیں جو مکمل کیلکولیٹر ٹیسٹ کلاس دکھاتی ہیں وہ @DisplayName تشریح کا استعمال کرتی ہیں۔ @DisplayName تشریح آپ کو اپنی ٹیسٹ کلاسز اور ٹیسٹ کے طریقوں کے لیے مزید معنی خیز نام بنانے میں مدد کرتی ہے۔