JUnit হল Java টেস্টিং ফ্রেমওয়ার্ক যা ইউনিট টেস্টের জন্য ব্যবহৃত হয়। ইউনিট টেস্টিং প্রক্রিয়ায় Assertions অত্যন্ত গুরুত্বপূর্ণ, কারণ এগুলির মাধ্যমে আপনি নিশ্চিত করতে পারেন যে আপনার কোড সঠিকভাবে কাজ করছে কি না। Assertions মূলত টেস্ট মেথডের মধ্যে ব্যবহৃত হয় এবং প্রত্যাশিত ফলাফল এবং প্রকৃত ফলাফল তুলনা করতে ব্যবহৃত হয়।
১. Assertion কি?
Assertion হলো এমন একটি যন্ত্র যা পরীক্ষার সময় পরীক্ষিত কোডের আউটপুট বা ফলাফলগুলির সাথে আপনার প্রত্যাশিত ফলাফল তুলনা করে। যদি টেস্টে কোনো ভুল বা ব্যতিক্রম ঘটে, তবে Assertion ব্যর্থ হবে এবং টেস্ট ফলস্বরূপ failure প্রদর্শন করবে।
JUnit ফ্রেমওয়ার্কে, Assertion এর সাহায্যে আপনি নিশ্চিত করতে পারেন যে আপনার কোড সঠিকভাবে কাজ করছে। JUnit বিভিন্ন ধরনের assertion পদ্ধতি সরবরাহ করে, যেগুলি আপনি টেস্ট কেসে ব্যবহার করতে পারেন।
২. JUnit Assertions এর ধরন
JUnit Assertions বিভিন্ন পদ্ধতির মাধ্যমে আপনার পরীক্ষার ফলাফল যাচাই করতে সাহায্য করে। JUnit 4 এবং JUnit 5 এর মধ্যে কিছু পার্থক্য রয়েছে, তবে তাদের মৌলিক ব্যবহারে কিছুটা সামঞ্জস্য রয়েছে। নিচে JUnit 4 এবং JUnit 5 এর assertion methods এর কিছু উদাহরণ দেওয়া হল।
২.১ JUnit 4 Assertions
JUnit 4 তে assertThat(), assertTrue(), assertFalse(), assertEquals(), assertNotNull() ইত্যাদি বিভিন্ন assertion পদ্ধতি পাওয়া যায়।
Example:
import org.junit.Assert;
import org.junit.Test;
public class MyTest {
@Test
public void testAddition() {
int sum = 2 + 2;
// Check if the result is 4
Assert.assertEquals(4, sum);
}
@Test
public void testNotNull() {
String str = "JUnit";
// Check if the string is not null
Assert.assertNotNull(str);
}
@Test
public void testTrue() {
boolean isTrue = true;
// Check if the condition is true
Assert.assertTrue(isTrue);
}
@Test
public void testFalse() {
boolean isFalse = false;
// Check if the condition is false
Assert.assertFalse(isFalse);
}
}
এখানে:
- assertEquals(expected, actual): এটি পরীক্ষিত ফলাফল এবং প্রত্যাশিত ফলাফলের মধ্যে তুলনা করে।
- assertNotNull(object): এটি যাচাই করে যে নির্দিষ্ট অবজেক্টটি
nullনয়। - assertTrue(condition): এটি যাচাই করে যে শর্তটি সত্য।
- assertFalse(condition): এটি যাচাই করে যে শর্তটি মিথ্যা।
২.২ JUnit 5 Assertions
JUnit 5 এ assertEquals(), assertTrue(), assertFalse() ইত্যাদি একইভাবে কাজ করে তবে এখানে আরও কিছু নতুন ফিচার যুক্ত হয়েছে। JUnit 5 এ assertAll(), assertThrows() ইত্যাদি নতুন assertion পদ্ধতি রয়েছে।
Example:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class MyTest {
@Test
void testAddition() {
int sum = 2 + 2;
// Check if the result is 4
assertEquals(4, sum);
}
@Test
void testNotNull() {
String str = "JUnit";
// Check if the string is not null
assertNotNull(str);
}
@Test
void testTrue() {
boolean isTrue = true;
// Check if the condition is true
assertTrue(isTrue);
}
@Test
void testFalse() {
boolean isFalse = false;
// Check if the condition is false
assertFalse(isFalse);
}
@Test
void testException() {
// Check if the method throws an exception
assertThrows(ArithmeticException.class, () -> {
int result = 1 / 0;
});
}
}
এখানে:
- assertEquals(expected, actual): প্রত্যাশিত এবং প্রকৃত ফলাফলের মধ্যে তুলনা করে।
- assertNotNull(object): নির্দিষ্ট অবজেক্টের
nullনা হওয়া নিশ্চিত করে। - assertTrue(condition): শর্তের সত্যতা যাচাই করে।
- assertFalse(condition): শর্তের মিথ্যাতা যাচাই করে।
- assertThrows(expectedType, executable): এই পদ্ধতিটি যাচাই করে যে একটি নির্দিষ্ট exception ছুড়ে দেওয়া হচ্ছে কি না।
৩. JUnit Assertions এর প্রয়োজনীয়তা
- Verification: Assertions নিশ্চিত করে যে আপনার কোড প্রত্যাশিতভাবে কাজ করছে।
- Fail Fast: যখন কোনো assertion ব্যর্থ হয়, তখন টেস্ট দ্রুত ব্যর্থ হয়ে যায়, যা আপনাকে সমস্যার স্থান দ্রুত চিহ্নিত করতে সাহায্য করে।
- Test Automation: Assertions আপনাকে টেস্ট স্বয়ংক্রিয়ভাবে চালানোর সুবিধা দেয়, এবং ডেভেলপাররা কোডের গুণগত মান সুরক্ষিত রাখতে পারে।
- Easy Debugging: যদি কোনো টেস্ট ফেইল হয়, assertion এর মাধ্যমে ত্রুটির কারণ দ্রুত নির্ণয় করা যায়।
৪. Assertion Methods এর অন্যান্য উদাহরণ
৪.১ assertEquals()
@Test
void testAddition() {
int result = 3 + 2;
assertEquals(5, result); // Expected value: 5, actual result: result
}
৪.২ assertNotEquals()
@Test
void testNotEqual() {
int result = 5 + 2;
assertNotEquals(8, result); // Ensures result is not 8
}
৪.৩ assertNull()
@Test
void testNull() {
String str = null;
assertNull(str); // Ensures str is null
}
৪.৪ assertSame() and assertNotSame()
@Test
void testSame() {
String str1 = "Hello";
String str2 = str1;
assertSame(str1, str2); // Ensures both references point to the same object
}
সারাংশ
JUnit Assertions হল টেস্টিং ফ্রেমওয়ার্কের একটি অত্যন্ত গুরুত্বপূর্ণ অংশ, যা নিশ্চিত করে যে আপনার কোড সঠিকভাবে কাজ করছে। JUnit 4 এবং JUnit 5 তে বিভিন্ন ধরনের assertion পদ্ধতি রয়েছে, যেমন assertEquals(), assertTrue(), assertFalse(), assertNotNull() ইত্যাদি, যা টেস্টের সময় যাচাই করা যায়। এগুলি ব্যবহার করে আপনি আপনার টেস্ট ফলাফল সঠিকভাবে যাচাই এবং বিশ্লেষণ করতে পারবেন, এবং কোডের গুণগত মান নিশ্চিত করতে সহায়তা করবে।
JUnit হল Java-তে ইউনিট টেস্টিং করার জন্য ব্যবহৃত একটি ফ্রেমওয়ার্ক। JUnit এর মাধ্যমে আপনি কোডের বিভিন্ন অংশ পরীক্ষা করতে পারেন এবং নিশ্চিত করতে পারেন যে আপনার কোড ঠিকভাবে কাজ করছে। assertEquals(), assertTrue(), এবং assertFalse() হল JUnit এর কিছু গুরুত্বপূর্ণ Assertion Method যা আপনাকে টেস্টের ফলাফল যাচাই করতে সহায়তা করে।
এই টিউটোরিয়ালে আমরা assertEquals(), assertTrue(), এবং assertFalse() এর ব্যবহার সম্পর্কে আলোচনা করব এবং এর মাধ্যমে কিভাবে ইউনিট টেস্টে ভ্যালিডেশন করা যায় তা দেখাব।
১. assertEquals() এর ব্যবহার
assertEquals() মেথডটি দুইটি মানের মধ্যে সমতা যাচাই করার জন্য ব্যবহৃত হয়। এটি দুটি মানের তুলনা করে এবং যদি মান দুটি সমান না হয়, তবে এটি একটি ত্রুটি (failure) প্রদান করবে।
Syntax:
assertEquals(expected, actual);
- expected: প্রত্যাশিত মান
- actual: আসল মান, যা যাচাই করা হচ্ছে
উদাহরণ:
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class MyTest {
@Test
public void testAddition() {
int result = 2 + 3;
assertEquals(5, result); // expected value 5, actual value is the result of 2 + 3
}
}
এখানে, assertEquals(5, result) যাচাই করবে যে 2 + 3 এর ফলাফল আসলেই 5 কিনা।
২. assertTrue() এর ব্যবহার
assertTrue() মেথডটি একটি শর্ত যাচাই করতে ব্যবহৃত হয়। এটি একটি বুলিয়ান মান যাচাই করে, এবং যদি এটি true না হয়, তাহলে এটি একটি ত্রুটি প্রদান করবে।
Syntax:
assertTrue(condition);
- condition: এটি একটি বুলিয়ান এক্সপ্রেশন যা true হতে হবে।
উদাহরণ:
import org.junit.Test;
import static org.junit.Assert.assertTrue;
public class MyTest {
@Test
public void testCondition() {
int number = 10;
assertTrue(number > 5); // checks if number is greater than 5
}
}
এখানে, assertTrue(number > 5) যাচাই করবে যে number ৫ এর বেশি কিনা। যদি শর্তটি false হয়, তবে এটি একটি ত্রুটি তৈরি করবে।
৩. assertFalse() এর ব্যবহার
assertFalse() মেথডটি একটি শর্ত যাচাই করতে ব্যবহৃত হয়, তবে এটি নিশ্চিত করে যে শর্তটি false হওয়া উচিত। যদি শর্তটি true হয়, তাহলে এটি একটি ত্রুটি প্রদর্শন করবে।
Syntax:
assertFalse(condition);
- condition: এটি একটি বুলিয়ান এক্সপ্রেশন যা false হতে হবে।
উদাহরণ:
import org.junit.Test;
import static org.junit.Assert.assertFalse;
public class MyTest {
@Test
public void testCondition() {
int number = 3;
assertFalse(number > 5); // checks if number is not greater than 5
}
}
এখানে, assertFalse(number > 5) যাচাই করবে যে number ৫ এর চেয়ে বড় নয়, অর্থাৎ শর্তটি false হওয়া উচিত।
৪. মিথ্যা/সঠিক ব্যবহার
- assertEquals() মূলত দুটি মানের সমতা যাচাই করতে ব্যবহৃত হয়।
- assertTrue() এবং assertFalse() শর্তের সঠিকতা বা ভুলতা যাচাই করতে ব্যবহৃত হয়, যেখানে assertTrue() শর্তটি true হওয়া উচিত এবং assertFalse() শর্তটি false হওয়া উচিত।
৫. বিশেষ পরিস্থিতিতে Assertion ব্যবহার
assertEquals() এবং assertTrue() এর মাধ্যমে আপনি বিভিন্ন পরিস্থিতি যেমন, বেসিক অপারেশন, কন্ডিশনাল চেক, ডেটা ভ্যালিডেশন ইত্যাদির জন্য ইউনিট টেস্ট তৈরি করতে পারবেন। উদাহরণস্বরূপ:
উদাহরণ ১: String Comparison
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class MyTest {
@Test
public void testStringEquality() {
String expected = "Hello";
String actual = "Hello";
assertEquals(expected, actual); // checking if both strings are equal
}
}
উদাহরণ ২: Boolean Condition
import org.junit.Test;
import static org.junit.Assert.assertTrue;
public class MyTest {
@Test
public void testBooleanCondition() {
boolean isAdult = true;
assertTrue(isAdult); // checking if isAdult is true
}
}
উদাহরণ ৩: Non-equality Test
import org.junit.Test;
import static org.junit.Assert.assertFalse;
public class MyTest {
@Test
public void testNotEqual() {
int x = 4;
int y = 5;
assertFalse(x == y); // checking if x is not equal to y
}
}
সারাংশ
JUnit এ assertEquals(), assertTrue(), এবং assertFalse() হল কিছু মৌলিক assertion মেথড যা আপনার টেস্টের ফলাফল যাচাই করতে ব্যবহৃত হয়। assertEquals() ব্যবহার করে আপনি দুটি মানের সমতা যাচাই করতে পারেন, assertTrue() দিয়ে আপনি শর্তের সত্যতা যাচাই করতে পারেন এবং assertFalse() ব্যবহার করে আপনি শর্তের মিথ্যাতা যাচাই করতে পারেন। এই assertion মেথডগুলো ইউনিট টেস্টিংয়ের মৌলিক অংশ হিসেবে কাজ করে এবং আপনার কোডের সঠিকতা নিশ্চিত করতে সহায়তা করে।
JUnit হল একটি Java ফ্রেমওয়ার্ক যা ইউনিট টেস্টিং করার জন্য ব্যবহৃত হয়। JUnit এর মাধ্যমে আপনি সহজেই কোডের কার্যকারিতা যাচাই করতে পারেন এবং এটি আপনাকে বিভিন্ন অ্যাসারশন মেথড সরবরাহ করে, যা টেস্টের ফলাফল যাচাই করার জন্য ব্যবহার করা হয়। আজকের আলোচনায়, আমরা assertArrayEquals(), assertThrows(), এবং assertNotNull() মেথডগুলির ব্যবহার দেখব।
১. assertArrayEquals(): অ্যারে টেস্টিংয়ের জন্য
assertArrayEquals() মেথডটি দুটি অ্যারে একে অপরের সাথে তুলনা করতে ব্যবহৃত হয়। এটি নিশ্চিত করে যে দুটি অ্যারে সমান কিনা। যদি অ্যারেগুলি সমান না হয়, তাহলে JUnit একটি AssertionError ছুড়ে দিবে।
উদাহরণ: assertArrayEquals() ব্যবহার
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
public class ArrayTest {
@Test
public void testArrayEquality() {
int[] expected = {1, 2, 3, 4};
int[] actual = {1, 2, 3, 4};
// Check if both arrays are equal
assertArrayEquals(expected, actual, "Arrays should be equal");
}
@Test
public void testArrayInequality() {
int[] expected = {1, 2, 3, 4};
int[] actual = {1, 2, 3, 5};
// This will fail because arrays are not equal
assertArrayEquals(expected, actual, "Arrays are not equal");
}
}
এখানে, testArrayEquality() পাস হবে কারণ দুটি অ্যারে সমান। তবে, testArrayInequality() একটি AssertionError ফেলে দিবে, কারণ অ্যারেগুলি সমান নয়।
২. assertThrows(): এক্সসেপশন টেস্টিংয়ের জন্য
assertThrows() মেথডটি টেস্ট করতে ব্যবহৃত হয় যে, একটি নির্দিষ্ট এক্সসেপশন সঠিকভাবে ছুড়ে দেওয়া হচ্ছে কিনা। আপনি যখন কোনো কোডের মধ্যে একটি এক্সসেপশন ছুড়তে চান, তখন assertThrows() মেথড ব্যবহার করতে পারেন।
উদাহরণ: assertThrows() ব্যবহার
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertThrows;
public class ExceptionTest {
@Test
public void testExceptionThrown() {
// Check if ArithmeticException is thrown
assertThrows(ArithmeticException.class, () -> {
int result = 1 / 0; // This will throw ArithmeticException
});
}
@Test
public void testNoExceptionThrown() {
// This test will pass because no exception is thrown
assertThrows(NullPointerException.class, () -> {
String str = null;
str.length(); // This will throw NullPointerException
});
}
}
এখানে, testExceptionThrown() পাস হবে, কারণ ArithmeticException সঠিকভাবে ছুড়ে দেওয়া হয়েছে। testNoExceptionThrown() এক্সসেপশন টেস্টিংয়ের ক্ষেত্রে ভুল ছিল এবং একটি AssertionError ছুড়ে দিবে কারণ NullPointerException ছুড়ে দেওয়া হয়েছে।
৩. assertNotNull(): অবজেক্ট নাল নয় কিনা টেস্ট করা
assertNotNull() মেথডটি একটি অবজেক্টের মান চেক করার জন্য ব্যবহৃত হয়। যদি অবজেক্টটি null হয়, তাহলে এটি AssertionError ছুড়ে দিবে। এই মেথডটি তখন ব্যবহৃত হয় যখন নিশ্চিত করতে চান যে একটি অবজেক্ট null নয়।
উদাহরণ: assertNotNull() ব্যবহার
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertNotNull;
public class NullCheckTest {
@Test
public void testNotNull() {
String str = "JUnit Testing";
// Check if the string is not null
assertNotNull(str, "String should not be null");
}
@Test
public void testNull() {
String str = null;
// This will fail because the string is null
assertNotNull(str, "String should not be null");
}
}
এখানে, testNotNull() পাস হবে কারণ স্ট্রিংটি null নয়। তবে, testNull() একটি AssertionError ছুড়ে দিবে, কারণ স্ট্রিংটি null।
সারাংশ
assertArrayEquals(), assertThrows(), এবং assertNotNull() হল JUnit এর গুরুত্বপূর্ণ অ্যাসারশন মেথড যা টেস্টিংয়ে ব্যবহৃত হয়:
- assertArrayEquals(): দুটি অ্যারে সমান কিনা তা যাচাই করে।
- assertThrows(): এক্সসেপশন ছুড়ে দেওয়ার সঠিকতা যাচাই করে।
- assertNotNull(): অবজেক্টটি
nullনয় কিনা তা নিশ্চিত করে।
এই অ্যাসারশন মেথডগুলি JUnit টেস্টিংকে আরও শক্তিশালী এবং নির্ভরযোগ্য করে তোলে, এবং আপনি আপনার কোডের গুণগত মান নিশ্চিত করতে এগুলি ব্যবহার করতে পারেন।
JUnit হল Java প্রোগ্রামিং ভাষায় টেস্টিং ফ্রেমওয়ার্ক যা অ্যাপ্লিকেশন টেস্টিংকে সহজ এবং কার্যকরী করে তোলে। JUnit টেস্ট কেসগুলো সাধারণত assertion মেথডের মাধ্যমে যাচাই করা হয়, যার মাধ্যমে নিশ্চিত করা হয় যে প্রত্যাশিত ফলাফল এবং প্রকৃত ফলাফল মিলছে কি না। তবে কখনও কখনও, আপনি যদি টেস্টে ব্যর্থতা ঘটান, তাহলে একটি Custom Assertion Message প্রদর্শন করতে চাইবেন, যা ব্যর্থতার কারণ বা আরও বিস্তারিত তথ্য প্রদান করবে।
এই গাইডে, আমরা JUnit-এ Custom Assertion Messages তৈরি করার প্রক্রিয়া দেখাবো। এটি assert মেথড ব্যবহার করার মাধ্যমে বা assertEquals এর মতো অ্যাসারশন মেথডে কাস্টম মেসেজ যোগ করে করা যাবে।
১. JUnit Assert Methods Overview
JUnit এর মধ্যে কয়েকটি সাধারণ assertion মেথড রয়েছে, যেমন:
- assertEquals(expected, actual): আশা করা মান এবং আসল মান একে অপরের সমান কিনা তা পরীক্ষা করে।
- assertTrue(condition): শর্তটি সত্য কিনা তা পরীক্ষা করে।
- assertFalse(condition): শর্তটি মিথ্যা কিনা তা পরীক্ষা করে।
- assertNotNull(object): অবজেক্টটি
nullনয় কিনা তা পরীক্ষা করে।
এই মেথডগুলির মাধ্যমে আপনি আপনার টেস্ট কেসের শর্ত যাচাই করতে পারেন এবং যখন শর্ত মেলে না, তখন কাস্টম মেসেজ প্রদর্শন করতে পারেন।
২. Custom Assertion Messages for assertEquals
ধরা যাক, আপনার দুটি মান তুলনা করার জন্য assertEquals ব্যবহার করতে হবে, এবং আপনি চান যে টেস্ট ফেইল হলে একটি কাস্টম মেসেজ প্রদর্শিত হোক।
Example: assertEquals with Custom Message
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class CustomAssertionTest {
@Test
public void testAddition() {
int expected = 5;
int actual = 3 + 2;
// Custom message when assertion fails
assertEquals("Addition result is incorrect!", expected, actual);
}
}
এখানে, assertEquals মেথডে একটি কাস্টম মেসেজ "Addition result is incorrect!" যোগ করা হয়েছে। যদি টেস্টটি ব্যর্থ হয়, তবে এই মেসেজটি লগে প্রদর্শিত হবে।
৩. Custom Assertion Messages for assertTrue and assertFalse
এছাড়া, assertTrue বা assertFalse ব্যবহার করে শর্ত যাচাই করার সময়ও কাস্টম মেসেজ ব্যবহার করা যেতে পারে।
Example: assertTrue with Custom Message
import org.junit.Test;
import static org.junit.Assert.assertTrue;
public class CustomAssertionTest {
@Test
public void testCondition() {
boolean condition = 10 > 5;
// Custom message when assertion fails
assertTrue("Condition should be true!", condition);
}
}
এখানে, যদি condition সত্য না হয়, তবে "Condition should be true!" এই কাস্টম মেসেজটি প্রদর্শিত হবে।
Example: assertFalse with Custom Message
import org.junit.Test;
import static org.junit.Assert.assertFalse;
public class CustomAssertionTest {
@Test
public void testCondition() {
boolean condition = 10 < 5;
// Custom message when assertion fails
assertFalse("Condition should be false!", condition);
}
}
এখানে, assertFalse ব্যবহার করা হয়েছে, এবং condition সত্য না হলে কাস্টম মেসেজ "Condition should be false!" প্রদর্শিত হবে।
৪. JUnit AssertionError কাস্টম মেসেজ
JUnit টেস্টে সাধারণত AssertionError থ্রো হয় যখন কোন অ্যাসারশন ব্যর্থ হয়। আপনি চাইলে AssertionError এ কাস্টম মেসেজও যোগ করতে পারেন। এই ধরনের কাস্টম মেসেজ ডিবাগিং এবং টেস্ট ফলাফল বিশ্লেষণে সহায়ক হতে পারে।
Example: Throwing Custom AssertionError
import org.junit.Test;
public class CustomAssertionTest {
@Test
public void testCustomErrorMessage() {
int expected = 5;
int actual = 3 + 2;
// Custom error message for assertion failure
if (expected != actual) {
throw new AssertionError("Custom AssertionError: Expected " + expected + " but got " + actual);
}
}
}
এখানে, যদি অ্যাসারশন ব্যর্থ হয়, তাহলে একটি AssertionError কাস্টম মেসেজ সহ থ্রো করা হবে, যা ব্যর্থতার কারণ সম্পর্কে বিস্তারিত তথ্য প্রদান করবে।
৫. JUnit 5 Custom Assertion Messages
JUnit 5 এ কাস্টম assertion মেসেজ আরও উন্নতভাবে ব্যবহৃত হতে পারে। JUnit 5-এর Assertions ক্লাসটি আরও বেশ কিছু ফিচার প্রদান করে, যেমন assertAll এবং assertThrows এর মতো অ্যাসারশন মেথড যা একাধিক assertion একসাথে পরীক্ষা করতে এবং exception থ্রো করা যাচাই করতে সাহায্য করে।
Example: JUnit 5 assertEquals with Custom Message
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CustomAssertionTest {
@Test
public void testAddition() {
int expected = 5;
int actual = 3 + 2;
// Custom message when assertion fails in JUnit 5
assertEquals(expected, actual, "Addition result is incorrect!");
}
}
এখানে, JUnit 5 এর assertEquals মেথডে কাস্টম মেসেজ "Addition result is incorrect!" দেয়া হয়েছে। যদি expected এবং actual সমান না হয়, তাহলে এই মেসেজটি প্রদর্শিত হবে।
৬. JUnit 5 Exception Handling with Custom Message
JUnit 5 এর assertThrows মেথড ব্যবহার করে আপনি কাস্টম মেসেজ সহ exception থ্রো যাচাই করতে পারেন।
Example: JUnit 5 assertThrows with Custom Message
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertThrows;
public class CustomAssertionTest {
@Test
public void testException() {
// Expecting ArithmeticException to be thrown
assertThrows(ArithmeticException.class, () -> {
int result = 10 / 0;
}, "Expected ArithmeticException due to division by zero");
}
}
এখানে, assertThrows মেথডের মাধ্যমে কাস্টম মেসেজসহ exception handling চেক করা হয়েছে।
সারাংশ
JUnit-এ কাস্টম assertion মেসেজ তৈরি করা ডেভেলপারদের জন্য বিশেষভাবে সহায়ক, কারণ এটি ব্যর্থতার কারণ দ্রুত সনাক্ত করতে সাহায্য করে এবং টেস্ট রেজাল্টের ব্যাখ্যা সরল করে তোলে। আপনি assertEquals, assertTrue, assertFalse ইত্যাদি মেথডে কাস্টম মেসেজ যোগ করে পরীক্ষার ফলাফল আরও স্পষ্ট এবং সহায়ক করতে পারেন। JUnit 5 এ আরও উন্নত ফিচার প্রদান করা হয়েছে, যা exception handling এবং একাধিক assertion পরীক্ষা করতে সহায়ক।
JUnit Java এর জন্য একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক যা ইউনিট টেস্ট লেখার জন্য ব্যবহৃত হয়। Assertions হল JUnit এর একটি গুরুত্বপূর্ণ অংশ যা টেস্ট কেসগুলির ফলাফল যাচাই করতে ব্যবহৃত হয়। Assertions এর মাধ্যমে, আপনি আপনার কোডের আচরণ যাচাই করতে পারেন এবং নিশ্চিত করতে পারেন যে আপনার কোড প্রত্যাশিতভাবে কাজ করছে।
এই টিউটোরিয়ালে, আমরা JUnit Assertions ব্যবহার করে complex test case তৈরি করার প্রক্রিয়া দেখব।
১. JUnit Assertions Overview
JUnit Assertions মূলত সেই মেথডগুলিকে বলা হয় যেগুলোর মাধ্যমে আপনি আপনার কোডের আউটপুট পরীক্ষণ এবং যাচাই করতে পারেন। JUnit 4 এবং JUnit 5 উভয় সংস্করণেই বিভিন্ন ধরনের assertions পাওয়া যায়। কিছু সাধারণ assertions হল:
- assertEquals(expected, actual): চেক করে যে
expectedমান এবংactualমান সমান কি না। - assertTrue(condition): চেক করে যে একটি শর্ত
trueকি না। - assertFalse(condition): চেক করে যে একটি শর্ত
falseকি না। - assertNotNull(object): চেক করে যে অবজেক্টটি
nullনয়। - assertNull(object): চেক করে যে অবজেক্টটি
null। - assertArrayEquals(expected, actual): চেক করে যে দুটি অ্যারে সমান কি না।
২. Complex Test Case Example with Assertions
ধরা যাক, আমরা একটি BankAccount ক্লাস লিখেছি যা একটি ব্যাংক অ্যাকাউন্টের ব্যালেন্স এবং ট্রান্সফার ফিচার নিয়ে কাজ করে।
BankAccount.java (Main Class)
public class BankAccount {
private String accountHolder;
private double balance;
public BankAccount(String accountHolder, double balance) {
this.accountHolder = accountHolder;
this.balance = balance;
}
public String getAccountHolder() {
return accountHolder;
}
public double getBalance() {
return balance;
}
// Method to transfer money between two accounts
public boolean transfer(BankAccount targetAccount, double amount) {
if (amount <= 0 || amount > balance) {
return false; // If amount is invalid or insufficient balance
}
this.balance -= amount;
targetAccount.balance += amount;
return true; // Transfer successful
}
}
BankAccountTest.java (JUnit Test Class)
এখন, আমরা JUnit Assertions ব্যবহার করে এই ক্লাসের টেস্ট কেস তৈরি করব।
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class BankAccountTest {
@Test
public void testTransferSuccess() {
// Creating two bank accounts
BankAccount sender = new BankAccount("Alice", 1000.0);
BankAccount receiver = new BankAccount("Bob", 500.0);
// Perform transfer of 200.0
boolean transferSuccessful = sender.transfer(receiver, 200.0);
// Assert that the transfer was successful
assertTrue(transferSuccessful, "Transfer should be successful");
// Assert the updated balances
assertEquals(800.0, sender.getBalance(), "Sender balance should be 800.0");
assertEquals(700.0, receiver.getBalance(), "Receiver balance should be 700.0");
}
@Test
public void testTransferInsufficientBalance() {
// Creating two bank accounts
BankAccount sender = new BankAccount("Alice", 1000.0);
BankAccount receiver = new BankAccount("Bob", 500.0);
// Perform transfer of 1200.0 (greater than sender's balance)
boolean transferSuccessful = sender.transfer(receiver, 1200.0);
// Assert that the transfer was unsuccessful
assertFalse(transferSuccessful, "Transfer should fail due to insufficient balance");
// Assert that the sender and receiver's balances remain unchanged
assertEquals(1000.0, sender.getBalance(), "Sender balance should remain 1000.0");
assertEquals(500.0, receiver.getBalance(), "Receiver balance should remain 500.0");
}
@Test
public void testTransferInvalidAmount() {
// Creating two bank accounts
BankAccount sender = new BankAccount("Alice", 1000.0);
BankAccount receiver = new BankAccount("Bob", 500.0);
// Perform transfer with an invalid amount (negative)
boolean transferSuccessful = sender.transfer(receiver, -100.0);
// Assert that the transfer was unsuccessful
assertFalse(transferSuccessful, "Transfer should fail due to invalid amount");
// Assert that the sender and receiver's balances remain unchanged
assertEquals(1000.0, sender.getBalance(), "Sender balance should remain 1000.0");
assertEquals(500.0, receiver.getBalance(), "Receiver balance should remain 500.0");
}
@Test
public void testTransferZeroAmount() {
// Creating two bank accounts
BankAccount sender = new BankAccount("Alice", 1000.0);
BankAccount receiver = new BankAccount("Bob", 500.0);
// Perform transfer of zero amount
boolean transferSuccessful = sender.transfer(receiver, 0.0);
// Assert that the transfer was unsuccessful
assertFalse(transferSuccessful, "Transfer should fail due to zero amount");
// Assert that the sender and receiver's balances remain unchanged
assertEquals(1000.0, sender.getBalance(), "Sender balance should remain 1000.0");
assertEquals(500.0, receiver.getBalance(), "Receiver balance should remain 500.0");
}
}
৩. Test Case Explanation
testTransferSuccess:- দুটি অ্যাকাউন্ট তৈরি করা হয়েছে এবং একটি সফল ট্রান্সফার সম্পন্ন করা হয়েছে।
- assertTrue(): এটি নিশ্চিত করে যে ট্রান্সফার সফল হয়েছে।
- assertEquals(): এটি যাচাই করে যে অ্যাকাউন্টগুলির ব্যালেন্স সঠিকভাবে আপডেট হয়েছে।
testTransferInsufficientBalance:- এখানে, অ্যাকাউন্টে পর্যাপ্ত ব্যালেন্স না থাকায় ট্রান্সফার ব্যর্থ হবে।
- assertFalse(): এটি নিশ্চিত করে যে ট্রান্সফার ব্যর্থ হয়েছে।
- assertEquals(): ব্যালেন্স অপরিবর্তিত থাকার জন্য এই assertion ব্যবহার করা হয়।
testTransferInvalidAmount:- এখানে, একটি নেতিবাচক পরিমাণ ট্রান্সফার করার চেষ্টা করা হয়েছে।
- assertFalse(): এটি নিশ্চিত করে যে নেতিবাচক পরিমাণের ট্রান্সফার ব্যর্থ হয়েছে।
testTransferZeroAmount:- এখানে, শূন্য পরিমাণের ট্রান্সফার চেষ্টা করা হয়েছে।
- assertFalse(): শূন্য পরিমাণ ট্রান্সফার ব্যর্থ হওয়া উচিত বলে নিশ্চিত করা হয়েছে।
৪. Assertions এবং তাদের কার্যকারিতা
- assertTrue(condition): শর্তটি সত্য হলে টেস্ট পাস হবে।
- assertFalse(condition): শর্তটি মিথ্যা হলে টেস্ট পাস হবে।
- assertEquals(expected, actual): যদি
expectedএবংactualমান সমান না হয় তবে টেস্ট ব্যর্থ হবে। - assertNotNull(object): অবজেক্টটি
nullনা হলে টেস্ট পাস হবে। - assertNull(object): অবজেক্টটি
nullহলে টেস্ট পাস হবে।
সারাংশ
JUnit Assertions ব্যবহার করে আপনি complex test cases তৈরি করতে পারেন এবং আপনার কোডের বিভিন্ন অংশের কার্যকারিতা যাচাই করতে পারেন। এই টেস্ট কেসগুলির মাধ্যমে আপনি কোডের লজিক, ডেটা অ্যাক্সেস, এবং অন্যান্য কার্যক্রম সঠিকভাবে যাচাই করতে পারেন। assertTrue(), assertFalse(), assertEquals() ইত্যাদি assertions দিয়ে আপনার টেস্ট কেসগুলির ফলাফল যাচাই করা যায় এবং এটি নিশ্চিত করে যে আপনার কোড প্রত্যাশিতভাবে কাজ করছে।
Read more