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