JUnit-এ @Before এবং @After টীকাগুলি কীভাবে ব্যবহার করবেন

JUnit-এ @Before এবং @After টীকাগুলি কীভাবে ব্যবহার করবেন

আপনি যখন একটি ইউনিট টেস্ট স্যুট লিখছেন, তখন কিছু অ-পরীক্ষা-সম্পর্কিত ক্রিয়াকলাপ থাকতে পারে যা আপনাকে সম্পাদন করতে হবে। এই কার্যক্রম যে কোনো রূপ নিতে পারে। আপনি একটি পরীক্ষা করার আগে আপনাকে একটি ডাটাবেসের সাথে সংযোগ করতে বা সংস্থান সংগ্রহ করতে হতে পারে। প্রতিটি পরীক্ষার কেস কার্যকর করার পরে, আপনাকে কিছু সংস্থান প্রকাশ করতে হতে পারে।





দিনের মেকইউজের ভিডিও

ইউনিট পরীক্ষার ক্লাসের সুযোগের বাইরে এই অ-পরীক্ষা-সম্পর্কিত ক্রিয়াকলাপগুলির যে কোনও একটি সম্পাদন করা অসম্ভব না হলে ক্লান্তিকর হতে পারে। আপনার পরীক্ষার ক্লাসের সফল সঞ্চালন এই ক্রিয়াকলাপগুলির উপর নির্ভর করতে পারে, তাই JUnit এই সমস্যাটি সমাধানের জন্য দুটি জোড়া টীকা প্রদান করে।





@Before All টীকা

একটি 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 টীকা পদ্ধতিতে কোনো ত্রুটি থাকে, পরীক্ষার রিপোর্টের ফলাফল ব্যর্থতার সাথে এটি নির্দেশ করবে।

@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 পদ্ধতির পরে চলে।





@আফটারঅল টীকা

@AfterAll টীকা সহ একটি পদ্ধতি পরীক্ষার ক্লাসের সমস্ত পরীক্ষার পদ্ধতিগুলি তাদের সম্পাদন শেষ করার পরে কার্যকর হবে। @AfterAll টীকা এর জন্য আদর্শ মৌলিক ফাইল অপারেশন , যেমন একটি ফাইল বন্ধ করা, বা একটি ডাটাবেস থেকে সংযোগ বিচ্ছিন্ন করা। @AfterAll টীকা হল @BeforeAll টীকাটির প্রতিরূপ। @BeforeAll টীকাটির মতো, @AfterAll টীকাটি অবশ্যই স্থির হতে হবে, অবশ্যই অকার্যকর হতে হবে এবং অনেকটাই ব্যক্তিগত হতে হবে না।

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

বিদ্যমান ক্যালকুলেটরটেস্ট ক্লাসে @AfterAll টীকাযুক্ত পদ্ধতি যোগ করা কনসোলে নিম্নলিখিত আউটপুট প্রিন্ট করে:

  আফটার অল টীকা আউটপুট

নোট করুন যে powerOffCalculator() পদ্ধতি, যা @AfterAll টীকা ব্যবহার করে, পরীক্ষার ক্লাসের শেষে প্রিন্ট করে, সমস্ত পরীক্ষা পদ্ধতি কার্যকর করার পরে।

কিভাবে উইন্ডোজ 10 আপডেট আনইনস্টল করবেন

@AfterEach টীকা

@AfterEach টীকাটি @BeforeEach টীকাটির প্রতিরূপ। তাদের একই বাধ্যতামূলক শর্ত রয়েছে, যা @BeforeAll এবং @AfterAll টীকাগুলির থেকে কিছুটা আলাদা। @AfterEach টীকাকে @BeforeEach টীকা (তাদের নাম ছাড়া) থেকে যেটি আলাদা করে তা হল @AfterEach পদ্ধতি প্রতিটি পরীক্ষার পদ্ধতির পরে চলে।

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

ক্যালকুলেটর টেস্ট ক্লাস চালানোর ফলে কনসোলে নিম্নলিখিত আউটপুট প্রিন্ট হয়:

  প্রতিটি টীকা আউটপুট পরে

আউটপুট দেখায় যে @AfterEach টীকা (রিটার্ন ফলাফল) এর সাথে যুক্ত পদ্ধতিটি চারবার প্রিন্ট করে। returnResults() পদ্ধতির প্রতিটি সঞ্চালন শুধুমাত্র প্রতিটি ইউনিট পরীক্ষার সম্পাদনের পরে ঘটে। @BeforeEach টীকাটির সাথে যুক্ত পদ্ধতি থেকে প্রতিটি আউটপুটের পরে returnResults() পদ্ধতির আউটপুট প্রদর্শিত হয় তা দ্বারা এটি স্পষ্ট।

টীকা ব্যবহার করে আপনার টেস্ট স্যুট পোলিশ করুন

জুনিট আপনাকে আগে এবং পরে জোড়া টীকা ব্যবহার করে অ-পরীক্ষা সম্পর্কিত প্রক্রিয়াগুলি পরিচালনা করার অনুমতি দেয়। এই চারটি টীকা অন্যান্য অনেক টীকাগুলির একটি তালিকার অন্তর্গত যা আপনার পরীক্ষায় মান যোগ করে। JUnit এর আরেকটি টীকা হল @DisplayName।

দুটি কোড উদাহরণ যা সম্পূর্ণ ক্যালকুলেটর টেস্ট ক্লাস প্রদর্শন করে @DisplayName টীকা ব্যবহার করে। @DisplayName টীকা আপনাকে আপনার পরীক্ষার ক্লাস এবং পরীক্ষার পদ্ধতির জন্য আরও অর্থপূর্ণ নাম তৈরি করতে সাহায্য করে।