JUnit হল Java এর একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক যা ইউনিট টেস্টিং, ইন্টিগ্রেশন টেস্টিং, এবং অন্যান্য ধরণের টেস্টিং পরিচালনা করতে ব্যবহৃত হয়। JUnit টেস্ট চালানোর সময়, কখনও কখনও আমাদের কিছু টেস্টের জন্য একটি নির্দিষ্ট সময়সীমা (timeout) সেট করতে হয়, যাতে টেস্টটি একটি নির্দিষ্ট সময়ের মধ্যে সম্পন্ন না হলে তা ব্যর্থ হিসেবে চিহ্নিত হয়। এটি মূলত লম্বা সময় নিতে পারে এমন টেস্টের জন্য ব্যবহৃত হয়, যেমন নেটওয়ার্ক কনেকশন, বড় ডেটাবেস অপারেশন বা স্লো প্রসেসিং।
JUnit এর মাধ্যমে timeout সেট করা খুবই সহজ, এবং এটি @Test অ্যানোটেশন ব্যবহার করে করা যায়। JUnit 4 এবং JUnit 5-এ timeout সেট করার প্রক্রিয়া কিছুটা ভিন্ন, তবে উভয় ক্ষেত্রে এর কার্যকারিতা একই।
১. JUnit 4 তে Timeout সেট করা
JUnit 4 এ timeout সেট করতে হলে, আপনি @Test অ্যানোটেশনের মধ্যে timeout প্যারামিটার ব্যবহার করতে পারেন। timeout প্যারামিটারটি মিলিসেকেন্ডে সময় নির্ধারণ করে। যদি টেস্টটি নির্ধারিত সময়ের মধ্যে সম্পন্ন না হয়, তবে এটি ব্যর্থ হবে।
উদাহরণ:
import org.junit.Test;
public class TimeoutTest {
@Test(timeout = 1000) // Timeout set to 1000 milliseconds (1 second)
public void testMethod() throws InterruptedException {
// Simulating a long-running task
Thread.sleep(500); // Sleep for 500 milliseconds
}
@Test(timeout = 1000) // Timeout set to 1000 milliseconds (1 second)
public void testMethodWithTimeoutFailure() throws InterruptedException {
// This test will fail because the sleep duration exceeds the timeout
Thread.sleep(1500); // Sleep for 1500 milliseconds
}
}
এখানে:
- প্রথম টেস্টটি
500মিলিসেকেন্ড সময় নেবে, যা 1000 মিলিসেকেন্ডের টেস্ট টাইমআউটের মধ্যে থাকবে এবং সফলভাবে চলবে। - দ্বিতীয় টেস্টটি
1500মিলিসেকেন্ড সময় নেবে, যা 1000 মিলিসেকেন্ডের টেস্ট টাইমআউটের বাইরে থাকবে এবং ব্যর্থ হবে।
২. JUnit 5 তে Timeout সেট করা
JUnit 5 তে timeout সেট করার জন্য @Test অ্যানোটেশন আরেকটি প্যারামিটার timeout ব্যবহার করতে হয়, তবে এই ক্ষেত্রে assertTimeout ব্যবহার করার বিকল্পও রয়েছে, যেখানে কোড ব্লকটি নির্দিষ্ট সময়ে সম্পন্ন হতে হবে।
উদাহরণ ১: @Test অ্যানোটেশন ব্যবহার করে Timeout
import org.junit.jupiter.api.Test;
public class TimeoutTest {
@Test
void testMethod() throws InterruptedException {
// Simulating a long-running task
Thread.sleep(500); // Sleep for 500 milliseconds
}
@Test
void testMethodWithTimeoutFailure() throws InterruptedException {
// This test will fail because the sleep duration exceeds the timeout
Thread.sleep(1500); // Sleep for 1500 milliseconds
}
}
উদাহরণ ২: assertTimeout ব্যবহার করে Timeout
JUnit 5 এর assertTimeout মেথড ব্যবহার করে আপনি একটি ব্লক কোডের জন্য সময়সীমা সেট করতে পারেন।
import org.junit.jupiter.api.Test;
import java.time.Duration;
import static org.junit.jupiter.api.Assertions.assertTimeout;
public class TimeoutTest {
@Test
void testMethodWithAssertTimeout() {
// Ensuring the code block completes within 1000 milliseconds (1 second)
assertTimeout(Duration.ofMillis(1000), () -> {
// Simulating a long-running task
Thread.sleep(500); // Sleep for 500 milliseconds
});
}
@Test
void testMethodWithAssertTimeoutFailure() {
// This test will fail because the sleep duration exceeds the timeout
assertTimeout(Duration.ofMillis(1000), () -> {
Thread.sleep(1500); // Sleep for 1500 milliseconds
});
}
}
এখানে:
- প্রথম টেস্টটি
500মিলিসেকেন্ড সময় নেবে এবং1000মিলিসেকেন্ডের টাইমআউটের মধ্যে শেষ হবে, তাই সফলভাবে চলবে। - দ্বিতীয় টেস্টটি
1500মিলিসেকেন্ড সময় নেবে এবং এটি টাইমআউটের বাইরে যাবে, যার কারণে এটি ব্যর্থ হবে।
৩. JUnit 5: @Timeout অ্যানোটেশন
JUnit 5 এ, আপনি @Timeout অ্যানোটেশন ব্যবহার করেও একটি নির্দিষ্ট টাইমআউট সেট করতে পারেন। এটি একটি ক্লাস বা মেথডের জন্য টাইমআউট নির্ধারণ করে।
উদাহরণ:
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import java.util.concurrent.TimeUnit;
public class TimeoutTest {
@Test
@Timeout(value = 1000, unit = TimeUnit.MILLISECONDS) // Timeout set to 1000 milliseconds (1 second)
void testMethod() throws InterruptedException {
// Simulating a long-running task
Thread.sleep(500); // Sleep for 500 milliseconds
}
@Test
@Timeout(value = 1000, unit = TimeUnit.MILLISECONDS) // Timeout set to 1000 milliseconds (1 second)
void testMethodWithTimeoutFailure() throws InterruptedException {
// This test will fail because the sleep duration exceeds the timeout
Thread.sleep(1500); // Sleep for 1500 milliseconds
}
}
এখানে:
@Timeoutঅ্যানোটেশনটি মেথডে টাইমআউট নির্ধারণ করে, যাvalueপ্যারামিটার দ্বারা সময় এবংunitপ্যারামিটার দ্বারা সময়ের একক নির্ধারণ করে।
৪. Conclusion
JUnit টেস্টের জন্য timeout সেট করা গুরুত্বপূর্ণ যখন আপনি চান যে কোনো টেস্ট একটি নির্দিষ্ট সময়ের মধ্যে শেষ হোক। এটি সিস্টেমের পারফরম্যান্স এবং রিসোর্স ব্যবহারের উপর নির্ভর করে। আপনি JUnit 4 তে @Test অ্যানোটেশন দিয়ে টাইমআউট সেট করতে পারেন, JUnit 5 তে assertTimeout মেথড বা @Timeout অ্যানোটেশন ব্যবহার করতে পারেন। এই টুলগুলি নিশ্চিত করে যে, আপনার টেস্টগুলি অপ্রত্যাশিতভাবে দীর্ঘ সময় নেয় না এবং আপনি সময়োপযোগী ফলাফল পেতে পারেন।
Read more