Skill

Repeated এবং Conditional Tests

জেইউনিট (JUnit) - Java Technologies

334

JUnit হলো একটি জনপ্রিয় টেস্ট ফ্রেমওয়ার্ক যা Java প্রোগ্রামিং ভাষায় ইউনিট টেস্টিং করার জন্য ব্যবহৃত হয়। JUnit 5 নতুন ফিচার এবং উন্নতি নিয়ে এসেছে, যার মধ্যে Repeated Tests এবং Conditional Tests অন্যতম। এই দুটি ফিচার আপনাকে টেস্টগুলি পুনরায় চালানোর এবং নির্দিষ্ট শর্তে টেস্ট চালানোর সুযোগ দেয়, যা টেস্টিং প্রক্রিয়াকে আরও নমনীয় এবং কার্যকরী করে তোলে।

এখানে, আমরা Repeated Tests এবং Conditional Tests এর মাধ্যমে JUnit 5 এ কিভাবে টেস্টিং করা যায়, তা উদাহরণসহ আলোচনা করব।


১. Repeated Tests (পুনরায় টেস্ট চালানো)

Repeated Tests একটি JUnit 5 ফিচার, যার মাধ্যমে আপনি একটি নির্দিষ্ট টেস্টকে একাধিক বার চালাতে পারেন। এটি বিশেষভাবে দরকারী যখন আপনি একই টেস্ট একাধিক সময় বিভিন্ন পরিস্থিতিতে বা ডেটার সঙ্গে পরীক্ষা করতে চান।

১.১ RepeatedTest Annotation

JUnit 5 তে @RepeatedTest অ্যানোটেশন ব্যবহার করে টেস্টকে পুনরায় চালানো যায়। আপনি কতবার টেস্টটি পুনরায় চালাবেন তা নির্ধারণ করতে পারবেন।

উদাহরণ: RepeatedTest ব্যবহার করা
import org.junit.jupiter.api.RepeatedTest;

public class RepeatedTestExample {

    @RepeatedTest(5)
    void testRepeated() {
        System.out.println("This test is repeated!");
    }
}

এখানে, @RepeatedTest(5) এর মাধ্যমে টেস্টটি ৫ বার পুনরায় চালানো হবে। প্রতিবার এটি একইভাবে কাজ করবে এবং আপনি কনসোল আউটপুটে This test is repeated! দেখতে পাবেন ৫ বার।

১.২ Custom Repetition Count

আপনি @RepeatedTest এর মধ্যে একটি ভ্যালু নির্ধারণ করে টেস্টের পুনরাবৃত্তি সংখ্যা কাস্টমাইজ করতে পারেন। এটি টেস্টের আউটপুট এবং ফলাফল সহজেই ম্যানেজ করতে সাহায্য করে।

@RepeatedTest(3)
void testCustomRepeated() {
    System.out.println("Custom repeated test!");
}

এই কোডটি টেস্টটিকে ৩ বার চালাবে এবং ৩ বার আউটপুট দেখাবে।


২. Conditional Tests (শর্তসাপেক্ষ টেস্ট)

Conditional Tests হল এমন টেস্ট যা কিছু নির্দিষ্ট শর্ত বা কন্ডিশনের ভিত্তিতে চালানো হয়। এই শর্তগুলির মধ্যে বিভিন্ন পরিবেশগত চেক বা কনফিগারেশন ভ্যালু থাকতে পারে, যা টেস্টের আগে যাচাই করা হয়। JUnit 5 এ, @EnabledIf এবং @DisabledIf অ্যানোটেশন ব্যবহার করে আপনি টেস্টের জন্য শর্তসাপেক্ষ কন্ডিশন নির্ধারণ করতে পারেন।

২.১ @EnabledIf এবং @DisabledIf

  • @EnabledIf: এটি একটি শর্তাধীন টেস্ট চালানোর জন্য ব্যবহার হয়। যদি শর্তটি পূর্ণ হয়, তবে টেস্টটি চালানো হবে।
  • @DisabledIf: এটি একটি শর্তাধীন টেস্ট বন্ধ করার জন্য ব্যবহার হয়। যদি শর্তটি পূর্ণ হয়, তবে টেস্টটি চালানো হবে না।

২.২ @EnabledIf Example

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIf;

public class ConditionalTestExample {

    @Test
    @EnabledIf("customCondition")
    void testEnabledCondition() {
        System.out.println("This test is enabled based on condition!");
    }

    boolean customCondition() {
        // Custom condition (for example, system property check)
        return System.getProperty("os.name").equals("Windows 10");
    }
}

এখানে, @EnabledIf অ্যানোটেশনটি customCondition() মেথডের উপর নির্ভরশীল। যদি System.getProperty("os.name") "Windows 10" হয়, তবে টেস্টটি চালানো হবে।

২.৩ @DisabledIf Example

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledIf;

public class ConditionalTestExample {

    @Test
    @DisabledIf("customDisableCondition")
    void testDisabledCondition() {
        System.out.println("This test is disabled based on condition!");
    }

    boolean customDisableCondition() {
        // Custom condition (for example, system property check)
        return System.getProperty("user.name").equals("admin");
    }
}

এখানে, @DisabledIf টেস্টটি নির্দিষ্ট শর্তের উপর ভিত্তি করে অক্ষম করবে। যদি System.getProperty("user.name") "admin" হয়, তবে টেস্টটি চালানো হবে না।


৩. Other Conditional Annotations

JUnit 5 এর আরও কিছু শর্তসাপেক্ষ অ্যানোটেশন রয়েছে, যেমন:

  1. @EnabledOnOs: শুধুমাত্র নির্দিষ্ট অপারেটিং সিস্টেমে টেস্ট চালাতে ব্যবহৃত হয়।
  2. @DisabledOnOs: শুধুমাত্র নির্দিষ্ট অপারেটিং সিস্টেমে টেস্ট চালানো বন্ধ করতে ব্যবহৃত হয়।
  3. @EnabledIfSystemProperty: নির্দিষ্ট সিস্টেম প্রোপার্টি অনুযায়ী টেস্ট চালানো হয়।
  4. @DisabledIfSystemProperty: নির্দিষ্ট সিস্টেম প্রোপার্টি অনুযায়ী টেস্ট চালানো বন্ধ করা হয়।

উদাহরণ: @EnabledOnOs এবং @DisabledOnOs

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledOnOs;
import org.junit.jupiter.api.condition.OS;

public class OperatingSystemTest {

    @Test
    @EnabledOnOs(OS.WINDOWS)
    void testOnWindows() {
        System.out.println("This test is enabled only on Windows OS!");
    }

    @Test
    @DisabledOnOs(OS.LINUX)
    void testNotOnLinux() {
        System.out.println("This test is disabled on Linux OS!");
    }
}

এখানে, @EnabledOnOs এবং @DisabledOnOs ব্যবহার করা হয়েছে, যা নির্দিষ্ট অপারেটিং সিস্টেমে টেস্ট চালানোর বা বন্ধ করার কাজ করে।


সারাংশ

Repeated Tests এবং Conditional Tests JUnit 5 এর শক্তিশালী ফিচার যা টেস্টিং প্রক্রিয়াকে আরও নমনীয় এবং কাস্টমাইজড করে তোলে। Repeated Tests ব্যবহার করে আপনি একটি টেস্টকে একাধিকবার চালাতে পারেন, এবং Conditional Tests এর মাধ্যমে শর্তসাপেক্ষভাবে টেস্ট চালানো বা বন্ধ করা সম্ভব। এই ফিচারগুলি আপনাকে জটিল টেস্টিং পরিস্থিতিতে সহায়তা করে এবং উন্নত টেস্টিং কৌশল প্রয়োগে সাহায্য করে।


Content added By

JUnit হলো Java এর জন্য একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক, যা ইউনিট টেস্ট, ইনটিগ্রেশন টেস্ট এবং অন্যান্য ধরণের টেস্ট লেখার জন্য ব্যবহৃত হয়। JUnit 5 এর নতুন ফিচারগুলোর মধ্যে একটি হলো @RepeatedTest অ্যানোটেশন, যা আপনাকে একটি টেস্ট মেথড একাধিকবার চালানোর সুযোগ দেয়।

@RepeatedTest অ্যানোটেশন ব্যবহার করলে আপনি নির্দিষ্ট সংখ্যক বার একই টেস্ট মেথডটি চালাতে পারেন। এটি তখন ব্যবহৃত হয় যখন আপনাকে একটি নির্দিষ্ট টেস্টের কার্যকারিতা একাধিকবার যাচাই করতে হয়।


১. @RepeatedTest এর মৌলিক ধারণা

@RepeatedTest অ্যানোটেশন JUnit 5 এর অংশ এবং এটি একটি টেস্ট মেথডের জন্য সংখ্যা নির্ধারণ করতে সহায়তা করে, যাতে একই টেস্ট একাধিক বার চালানো যায়। এর মাধ্যমে আপনি একই টেস্টের ফলাফল বিভিন্ন বার পরীক্ষা করতে পারেন, বিশেষত যখন টেস্টের নির্দিষ্ট আচরণ বা অবস্থা নিশ্চিত করতে চাই।

এটি সাধারণত performance testing, reliability testing, বা stress testing এর জন্য ব্যবহৃত হয়, যেখানে একই কোডের ওপর অনেক বার টেস্ট চালানো হয়।

উদাহরণ:

import org.junit.jupiter.api.RepeatedTest;

public class MyTest {
    
    @RepeatedTest(5)  // 5 বার একই টেস্ট চালাবে
    void repeatedTest() {
        System.out.println("Running repeated test");
    }
}

উপরের উদাহরণে, @RepeatedTest(5) দ্বারা repeatedTest() মেথডটি 5 বার চালানো হবে।


২. @RepeatedTest এর সাথে Parameterized Tests

@RepeatedTest এর মাধ্যমে শুধুমাত্র টেস্টের পুনরাবৃত্তি করা যায়, কিন্তু যদি আপনি টেস্টের মধ্যে কিছু ভ্যালু প্যারামিটার হিসেবে দিতে চান, তাহলে parameterized tests ব্যবহার করা যেতে পারে।

উদাহরণ:

import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class MyTest {

    @RepeatedTest(3)
    void repeatedTest() {
        System.out.println("Running repeated test");
    }

    @ParameterizedTest
    @ValueSource(ints = {1, 2, 3, 4})
    void testWithValues(int number) {
        System.out.println("Testing with value: " + number);
    }
}

এখানে, @ValueSource ব্যবহার করে বিভিন্ন ভ্যালু প্যারামিটার হিসাবে টেস্টে প্রদান করা হয়েছে, এবং @RepeatedTest ব্যবহার করে একই টেস্টের পুনরাবৃত্তি 3 বার করা হয়েছে।


৩. @RepeatedTest এবং Display Name

JUnit 5 এ আপনি @RepeatedTest এর সাথে @DisplayName অ্যানোটেশন ব্যবহার করে টেস্টের নাম কাস্টমাইজ করতে পারেন।

উদাহরণ:

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.RepeatedTest;

public class MyTest {

    @RepeatedTest(3)
    @DisplayName("Test repeated with custom display name")
    void repeatedTest() {
        System.out.println("Running repeated test with custom display name");
    }
}

এখানে, @DisplayName টেস্টের নাম কাস্টমাইজ করা হয়েছে যাতে টেস্ট রান হওয়ার সময় এটি বুঝতে সুবিধা হয়।


৪. @RepeatedTest এবং TestInfo ব্যবহার

JUnit 5 এর TestInfo এর মাধ্যমে আপনি টেস্টের কিছু মেটাডেটা যেমন নাম, পুনরাবৃত্তির সংখ্যা ইত্যাদি সহজেই জানতে পারেন।

উদাহরণ:

import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.TestInfo;

public class MyTest {

    @RepeatedTest(3)
    void repeatedTest(TestInfo testInfo) {
        System.out.println(testInfo.getDisplayName() + " is running");
    }
}

এখানে, TestInfo ব্যবহার করে আপনি টেস্টের নাম এবং অন্যান্য তথ্য নিতে পারবেন।


৫. @RepeatedTest এবং Dynamic Test

JUnit 5 এ dynamic tests চালানোর সময়, @RepeatedTest এবং DynamicTest একসাথে ব্যবহার করা যায়।

উদাহরণ:

import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.DynamicTest.Stream;

import java.util.stream.Stream;

public class MyTest {

    @TestFactory
    Stream<DynamicTest> dynamicTests() {
        return Stream.of(
                DynamicTest.dynamicTest("Test 1", () -> {
                    System.out.println("Running dynamic test 1");
                }),
                DynamicTest.dynamicTest("Test 2", () -> {
                    System.out.println("Running dynamic test 2");
                })
        );
    }

    @RepeatedTest(2)
    void repeatedTest() {
        System.out.println("Repeated test running");
    }
}

এখানে, @RepeatedTest এবং DynamicTest একসাথে ব্যবহৃত হয়েছে, এবং Stream<DynamicTest> এর মাধ্যমে ডাইনামিক টেস্ট চালানো হয়েছে।


৬. @RepeatedTest এর সুবিধা

  1. Reliability Testing: একাধিক বার একই টেস্ট চালানোর মাধ্যমে টেস্টের নির্ভরযোগ্যতা যাচাই করা যায়।
  2. Performance Testing: একাধিক বার টেস্ট চালিয়ে কনকারেন্ট এবং লোড টেস্ট করা যায়।
  3. Consistency: টেস্টটি বিভিন্ন সময় চালিয়ে একই ফলাফল আসছে কিনা, সেটি যাচাই করা সম্ভব।

সারাংশ

JUnit 5 এর @RepeatedTest অ্যানোটেশন ব্যবহার করে একই টেস্ট একাধিক বার চালানো যায়। এটি ইউনিট টেস্টে পুনরাবৃত্তি চালানোর জন্য কার্যকরী একটি টুল। আপনি এটি ব্যবহার করে বিভিন্ন reliability এবং performance testing করতে পারেন, এবং এর সাথে parameterized tests, custom display names, dynamic tests, এবং TestInfo এর মতো অন্যান্য সুবিধাও উপভোগ করতে পারবেন।


Content added By

JUnit একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক যা Java প্রোগ্রামিং ভাষায় ইউনিট টেস্ট লেখার জন্য ব্যবহৃত হয়। এর মধ্যে কিছু অ্যানোটেশন রয়েছে যা আপনাকে নির্দিষ্ট কন্ডিশনাল টেস্ট চালাতে সাহায্য করে, অর্থাৎ একটি টেস্ট নির্দিষ্ট শর্তে চালানো যাবে। দুটি গুরুত্বপূর্ণ অ্যানোটেশন যা কন্ডিশনাল টেস্ট চালানোর জন্য ব্যবহার করা হয়, তা হল @EnabledOnOs এবং @EnabledIf

এই অ্যানোটেশনগুলি আপনাকে নির্দিষ্ট শর্ত বা পরিবেশে টেস্ট চালানোর অনুমতি দেয়, যেমন OS নির্ভর টেস্টিং বা কাস্টম কন্ডিশন অনুসারে টেস্ট চালানো।


১. @EnabledOnOs অ্যানোটেশন

@EnabledOnOs অ্যানোটেশনটি নির্দিষ্ট অপারেটিং সিস্টেমে টেস্ট চালানোর জন্য ব্যবহার করা হয়। এটি সাধারণত JUnit 5 এ ব্যবহৃত হয় এবং টেস্ট চালানোর জন্য যে অপারেটিং সিস্টেম প্রয়োজন, তা নির্দিষ্ট করা যায়।

উদাহরণ:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledOnOs;
import org.junit.jupiter.api.condition.OS;

public class OperatingSystemTest {

    @Test
    @EnabledOnOs(OS.WINDOWS)
    void testOnWindows() {
        System.out.println("This test is running on Windows OS");
    }

    @Test
    @EnabledOnOs(OS.LINUX)
    void testOnLinux() {
        System.out.println("This test is running on Linux OS");
    }
}

এখানে, @EnabledOnOs অ্যানোটেশনটি testOnWindows() মেথডকে শুধুমাত্র Windows অপারেটিং সিস্টেমে চালাতে দিবে এবং testOnLinux() মেথডটিকে শুধুমাত্র Linux অপারেটিং সিস্টেমে চালাবে।

@EnabledOnOs এর বিভিন্ন OS উদাহরণ:

  • OS.WINDOWS: উইন্ডোজ অপারেটিং সিস্টেমে টেস্ট চালানো হবে।
  • OS.LINUX: লিনাক্স অপারেটিং সিস্টেমে টেস্ট চালানো হবে।
  • OS.MAC: ম্যাক অপারেটিং সিস্টেমে টেস্ট চালানো হবে।
  • OS.ANY: যেকোনো অপারেটিং সিস্টেমে টেস্ট চালানো যাবে।

২. @EnabledIf অ্যানোটেশন

@EnabledIf অ্যানোটেশনটি আরও কাস্টম শর্তে টেস্ট চালানোর জন্য ব্যবহৃত হয়। এটি আপনাকে বিশেষ শর্ত অনুযায়ী টেস্ট চালানোর অনুমতি দেয়। আপনি একটি কন্ডিশনাল এক্সপ্রেশন অথবা কাস্টম কন্ডিশন ব্যবহার করতে পারেন, যা Boolean মান রিটার্ন করবে। এটি সাধারণত কন্ডিশনাল লজিক অথবা কাস্টম কন্ডিশনাল টেস্ট চালানোর জন্য ব্যবহৃত হয়।

উদাহরণ:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIf;

public class ConditionalTest {

    @Test
    @EnabledIf("customCondition")
    void testIfConditionIsTrue() {
        System.out.println("This test runs only if the condition is true");
    }

    boolean customCondition() {
        return true; // condition can be based on any logic
    }
}

এখানে, customCondition() মেথডটি একটি কন্ডিশন চেক করছে। যদি এই কন্ডিশনটি সত্য (true) হয়, তাহলে testIfConditionIsTrue() মেথডটি চলবে। আপনি এখানে কোনো কাস্টম লজিক প্রয়োগ করতে পারেন, যেমন কোন পরিবেশের সেটিংস, সিস্টেম প্রোপার্টি চেক বা কোনো ডেটা কন্ডিশন ইত্যাদি।


৩. @EnabledIf এবং @EnabledOnOs এর মধ্যে পার্থক্য

  • @EnabledOnOs: এটি নির্দিষ্ট অপারেটিং সিস্টেমে টেস্ট চালানোর জন্য ব্যবহার করা হয়।
  • @EnabledIf: এটি কাস্টম কন্ডিশন বা শর্ত অনুসারে টেস্ট চালানোর জন্য ব্যবহৃত হয়।

৪. কাস্টম কন্ডিশনাল টেস্টিং উদাহরণ

এখানে, আমরা একটি উদাহরণ দেখব যেখানে @EnabledIf কন্ডিশন ব্যবহার করে একটি টেস্ট চালানো হবে কেবলমাত্র যদি সিস্টেম প্রোপার্টি নির্দিষ্ট মানের সাথে মেলে।

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIf;

public class CustomConditionTest {

    @Test
    @EnabledIf("java.specification.version >= '11'")
    void testForJava11AndAbove() {
        System.out.println("This test is enabled only if Java version is 11 or above");
    }
}

এখানে, @EnabledIf কন্ডিশনটি পরীক্ষা করে যে Java version 11 বা তার উপরে রয়েছে কিনা। যদি শর্তটি পূর্ণ হয়, তবে টেস্টটি চালানো হবে।


৫. JUnit 5 এ Conditional Test চালানোর সুবিধা

  1. System and Environment Specific Tests: আপনি সিস্টেম বা পরিবেশ নির্ভর টেস্ট চালাতে পারেন, যেমন অপারেটিং সিস্টেম বা Java ভার্সন অনুসারে টেস্ট চালানো।
  2. Custom Conditions: JUnit 5-এ আপনি কাস্টম কন্ডিশন তৈরি করতে পারেন, যা শুধুমাত্র বিশেষ পরিস্থিতিতে টেস্ট চালানোর অনুমতি দেয়।
  3. Flexible Test Execution: বিভিন্ন পরিস্থিতিতে টেস্টের কার্যকারিতা এবং আউটপুট পরিবর্তন করতে সহায়ক, যা সঠিকভাবে টেস্ট করার সম্ভাবনা বাড়ায়।

সারাংশ

@EnabledOnOs এবং @EnabledIf অ্যানোটেশনগুলি JUnit 5 এর নতুন ফিচার যা আপনাকে কন্ডিশনাল টেস্ট চালাতে সহায়তা করে। @EnabledOnOs দিয়ে নির্দিষ্ট অপারেটিং সিস্টেমে টেস্ট চালানো সম্ভব, এবং @EnabledIf দিয়ে আপনি কাস্টম কন্ডিশন বা শর্ত অনুসারে টেস্ট চালাতে পারবেন। এটি বিভিন্ন পরিবেশে টেস্টিং সহজ এবং কার্যকরী করে তোলে এবং শর্তাধীন টেস্টিংয়ের সুবিধা প্রদান করে।


Content added By

JUnit একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক যা Java প্রোগ্রামিং ভাষায় ইউনিট টেস্ট লেখার জন্য ব্যবহৃত হয়। JUnit ব্যবহার করে আপনি সহজেই টেস্ট কন্ডিশন এবং বিভিন্ন অবস্থা (যেমন অপারেটিং সিস্টেম বা কাস্টম কন্ডিশন) অনুযায়ী টেস্ট চালাতে পারেন। JUnit-এ টেস্ট কন্ডিশন বা কাস্টম শর্তাবলী দিয়ে টেস্ট চালানো সাধারণত Assume বা @EnabledIf, @DisabledIf অ্যানোটেশন ব্যবহার করে করা হয়।

এই টিউটোরিয়ালে, আমরা দেখব কিভাবে অপারেটিং সিস্টেম এবং কাস্টম শর্তাবলী ভিত্তিক টেস্ট চালানো যায় JUnit এর মাধ্যমে।


১. JUnit এ Operating System ভিত্তিক Test চালানো

JUnit এর মাধ্যমে আপনি নির্দিষ্ট অপারেটিং সিস্টেমে টেস্ট চালাতে পারেন। এটি সাধারণত System Property বা Assume ক্লাস ব্যবহার করে করা হয়। উদাহরণস্বরূপ, আপনি যদি একটি টেস্ট ফাংশন চালাতে চান যা শুধুমাত্র Windows অপারেটিং সিস্টেমে চলে, তবে আপনি Assume ব্যবহার করতে পারেন।

উদাহরণ: Windows OS ভিত্তিক টেস্ট

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assumptions;

public class OsBasedTest {

    @Test
    void testOnWindows() {
        String os = System.getProperty("os.name").toLowerCase();
        Assumptions.assumeTrue(os.contains("win"));
        
        // Test code that should run only on Windows OS
        System.out.println("This test runs only on Windows.");
    }

    @Test
    void testOnMac() {
        String os = System.getProperty("os.name").toLowerCase();
        Assumptions.assumeTrue(os.contains("mac"));

        // Test code that should run only on macOS
        System.out.println("This test runs only on macOS.");
    }
}

এখানে, Assume.assumeTrue() ব্যবহার করে নিশ্চিত করা হয়েছে যে টেস্টটি শুধুমাত্র Windows বা macOS অপারেটিং সিস্টেমে চালানো হবে। যদি শর্তটি সঠিক না হয়, তবে টেস্টটি বাদ দেওয়া হবে (Skipped)।


২. JUnit এ Custom Conditions ভিত্তিক Test চালানো

JUnit 5-এ @EnabledIf এবং @DisabledIf অ্যানোটেশন ব্যবহার করে আপনি কাস্টম শর্তাবলী ভিত্তিক টেস্ট চালাতে পারেন। উদাহরণস্বরূপ, আপনি কোনো নির্দিষ্ট শর্ত পূর্ণ হলে টেস্ট চালাতে পারেন এবং অন্যথায় টেস্টটি বন্ধ রাখতে পারেন।

উদাহরণ: Custom Condition ভিত্তিক টেস্ট চালানো

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.api.condition.DisabledIf;

public class CustomConditionTest {

    @Test
    @EnabledIf("customCondition")
    void testEnabledIfCondition() {
        System.out.println("This test is enabled because the custom condition is true.");
    }

    @Test
    @DisabledIf("customCondition")
    void testDisabledIfCondition() {
        System.out.println("This test is disabled because the custom condition is true.");
    }

    boolean customCondition() {
        // Your custom condition logic (e.g., checking some property or system state)
        return true; // Example: returns true to enable/disable test
    }
}

এখানে, @EnabledIf এবং @DisabledIf অ্যানোটেশন ব্যবহার করা হয়েছে, যেখানে customCondition() মেথডটি কাস্টম শর্ত পরীক্ষা করে। যদি customCondition() সত্য (true) হয়, তাহলে টেস্টটি চালানো হবে অথবা বন্ধ করা হবে।


৩. JUnit 5 Condition Annotations: @EnabledIf, @DisabledIf

JUnit 5-এর @EnabledIf এবং @DisabledIf অ্যানোটেশনগুলো আপনাকে বিভিন্ন কন্ডিশন ভিত্তিক টেস্ট চালানোর সুযোগ দেয়। আপনি এই অ্যানোটেশনগুলো ব্যবহার করে শর্ত নির্ধারণ করতে পারেন।

@EnabledIf অ্যানোটেশন

@EnabledIf ব্যবহার করলে একটি টেস্ট শুধুমাত্র তখনই চালানো হবে যখন নির্দিষ্ট শর্ত পূর্ণ হবে। এই শর্তটি একটি কাস্টম শর্ত হতে পারে, যেমন একটি সিস্টেম প্রোপার্টি বা কোনো ফাইলের উপস্থিতি।

@EnabledIf("java.lang.System.getProperty('os.name').contains('Linux')")
void testOnLinux() {
    // This test runs only on Linux OS
}

এখানে, টেস্টটি শুধুমাত্র তখন চালানো হবে যদি অপারেটিং সিস্টেমের নাম "Linux" থাকে।

@DisabledIf অ্যানোটেশন

@DisabledIf ব্যবহার করলে একটি টেস্ট তখনই বাদ দেওয়া হবে (skipped) যখন নির্দিষ্ট শর্ত পূর্ণ হবে।

@DisabledIf("java.lang.System.getProperty('os.name').contains('Windows')")
void testOnNonWindows() {
    // This test will be disabled if the OS is Windows
}

এখানে, টেস্টটি Windows OS-এ চলে না, অর্থাৎ, Windows এ থাকলে এটি ডিসেবল হয়ে যাবে।


৪. JUnit 5 Conditional Execution: Assume Class

JUnit 5-এ Assume ক্লাস ব্যবহার করে শর্ত ভিত্তিক টেস্ট চালানো যায়। Assume ক্লাস ব্যবহার করলে টেস্টটি রান হবে যদি শর্তটি পূর্ণ হয়, অন্যথায় টেস্টটি বাতিল হয়ে যাবে।

উদাহরণ: Conditional Test Execution with Assume

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assumptions;

public class ConditionalTest {

    @Test
    void testOnLinux() {
        String os = System.getProperty("os.name").toLowerCase();
        Assumptions.assumeTrue(os.contains("linux"));
        
        // Test logic that should only run on Linux
        System.out.println("This test runs on Linux only.");
    }

    @Test
    void testOnWindows() {
        String os = System.getProperty("os.name").toLowerCase();
        Assumptions.assumeTrue(os.contains("win"));
        
        // Test logic that should only run on Windows
        System.out.println("This test runs on Windows only.");
    }
}

এখানে, Assume.assumeTrue() ব্যবহার করা হয়েছে, যা Linux বা Windows অপারেটিং সিস্টেমে টেস্ট চালাতে সাহায্য করবে। যদি শর্ত পূর্ণ না হয়, তবে টেস্টটি স্কিপ হয়ে যাবে।


৫. JUnit 5 Execution Conditions

JUnit 5-এ ExecutionConditions ব্যবহারের মাধ্যমে আপনার টেস্টের শর্ত অনুযায়ী টেস্ট কনফিগার করা যায়। উদাহরণস্বরূপ, আপনি কোনো নির্দিষ্ট সিস্টেম প্রপার্টি বা কনফিগারেশন সেটিংস যাচাই করে টেস্ট চালাতে পারেন।

উদাহরণ: ExecutionCondition Custom Logic

@ExecutionCondition
public class CustomExecutionCondition implements Condition {

    @Override
    public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
        String os = System.getProperty("os.name").toLowerCase();
        if (os.contains("win")) {
            return ConditionEvaluationResult.enabled("Test is enabled on Windows");
        } else {
            return ConditionEvaluationResult.disabled("Test is disabled on non-Windows systems");
        }
    }
}

এখানে, CustomExecutionCondition একটি কাস্টম কন্ডিশন নির্ধারণ করেছে, যা Windows OS তে টেস্ট চালাবে এবং অন্যথায় নিষ্ক্রিয় করবে।


সারাংশ

JUnit 5 আপনাকে Operating System এবং Custom Conditions ভিত্তিক টেস্ট চালানোর জন্য শক্তিশালী কনডিশনাল টেস্টিং ফিচার প্রদান করে। আপনি Assume, @EnabledIf, @DisabledIf, এবং ExecutionCondition ব্যবহার করে নির্দিষ্ট শর্ত পূর্ণ হলে টেস্ট চালাতে পারেন এবং অন্যথায় টেস্ট স্কিপ বা ডিসেবল করতে পারেন। এর মাধ্যমে, আপনি আপনার টেস্ট প্রক্রিয়াকে আরও ফ্লেক্সিবল এবং কাস্টমাইজড করতে পারবেন, যা আপনাকে বিভিন্ন পরিবেশে সঠিকভাবে টেস্ট পরিচালনা করতে সাহায্য করবে।


Content added By

JUnit হল একটি জনপ্রিয় Java টেস্টিং ফ্রেমওয়ার্ক যা ইউনিট টেস্টিংয়ের জন্য ব্যবহৃত হয়। এটি প্রোগ্রামারদের কোডের ছোট অংশগুলি পরীক্ষা করতে সহায়তা করে, যাতে কোনো পরিবর্তন বা নতুন ফিচার যোগ করার পর পুরনো কোড ঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করা যায়।

JUnit 5 (Jupiter) এ কিছু নতুন বৈশিষ্ট্য এবং অ্যানোটেশন যুক্ত করা হয়েছে, যেমন conditional tests এবং repeated tests, যা টেস্টিং পদ্ধতিকে আরও কার্যকরী ও নমনীয় করে তোলে। এই টিউটোরিয়ালে, আমরা JUnit 5 এর মধ্যে Conditional এবং Repeated Test Setup সম্পর্কিত কিছু উদাহরণ দেখব।


১. Conditional Test Setup

Conditional Test এমন একটি টেস্ট যেখানে টেস্টটি নির্দিষ্ট শর্তে চালানো হয়। উদাহরণস্বরূপ, কোনো টেস্ট ফাংশন শুধুমাত্র নির্দিষ্ট প্ল্যাটফর্মে বা নির্দিষ্ট অবস্থায় চালানো উচিত।

১.১ @EnabledIf এবং @DisabledIf অ্যানোটেশন

JUnit 5 এ @EnabledIf এবং @DisabledIf অ্যানোটেশন ব্যবহার করে শর্তসাপেক্ষ টেস্ট তৈরি করা যেতে পারে। এই অ্যানোটেশনগুলো টেস্ট চালানোর পূর্বে নির্দিষ্ট শর্ত যাচাই করে।

উদাহরণ: @EnabledIf ব্যবহার করা
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIf;

public class ConditionalTest {

    @Test
    @EnabledIf(expression = "#{systemProperties['os.name'].contains('Windows')}", reason = "Only run on Windows OS")
    void testOnlyOnWindows() {
        System.out.println("This test runs only on Windows OS");
    }
}

এখানে, @EnabledIf অ্যানোটেশনটি চেক করবে যে সিস্টেমের OS উইন্ডোজ কিনা। যদি উইন্ডোজ না হয়, তাহলে টেস্টটি চলবে না।

উদাহরণ: @DisabledIf ব্যবহার করা
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledIf;

public class ConditionalTest {

    @Test
    @DisabledIf(expression = "#{systemProperties['os.name'].contains('Mac')}", reason = "Do not run on Mac OS")
    void testNotOnMac() {
        System.out.println("This test will not run on Mac OS");
    }
}

এখানে, @DisabledIf অ্যানোটেশনটি নিশ্চিত করবে যে Mac OS-এ টেস্টটি চালানো হবে না।


২. Repeated Test Setup

Repeated Tests হল এমন টেস্ট যেখানে একই টেস্টটি একাধিকবার চালানো হয়, যা সাধারণত কোনো নির্দিষ্ট লজিক বা ফাংশনালিটির কার্যকারিতা নিশ্চিত করার জন্য ব্যবহৃত হয়।

২.১ @RepeatedTest অ্যানোটেশন

JUnit 5 এ @RepeatedTest অ্যানোটেশন ব্যবহারের মাধ্যমে একই টেস্টকে একাধিকবার চালানো যায়। এটি test repetition এর জন্য উপকারী, বিশেষত যখন টেস্টের ফলাফল নির্ভরশীল হতে পারে এবং একাধিক রান প্রয়োজন হয়।

উদাহরণ: @RepeatedTest ব্যবহার করা
import org.junit.jupiter.api.RepeatedTest;

public class RepeatedTestExample {

    @RepeatedTest(5)
    void testRepeatedly() {
        System.out.println("This test is run 5 times");
    }
}

এখানে, @RepeatedTest(5) অ্যানোটেশনটি testRepeatedly মেথডটি ৫ বার চালাবে।

২.২ @BeforeEach এবং @AfterEach এর সাথে Repeated Test Setup

আপনি @BeforeEach এবং @AfterEach অ্যানোটেশন ব্যবহার করে প্রতিটি টেস্টের আগে এবং পরে কিছু নির্দিষ্ট কাজ সম্পন্ন করতে পারেন, যেমন ইনিশিয়ালাইজেশন বা টেস্ট পরিষ্কার করা।

উদাহরণ: @BeforeEach এবং @AfterEach ব্যবহার করা
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.RepeatedTest;

public class RepeatedTestWithSetup {

    @BeforeEach
    void setup() {
        System.out.println("Setting up before each test");
    }

    @RepeatedTest(3)
    void testRepeatedly() {
        System.out.println("Running repeated test");
    }

    @AfterEach
    void cleanup() {
        System.out.println("Cleaning up after each test");
    }
}

এখানে:

  • @BeforeEach টেস্টের আগে প্রয়োজনীয় সেটআপ করবে।
  • @RepeatedTest(3) টেস্টটি তিনবার চালাবে।
  • @AfterEach টেস্টের পরে ক্লিনআপ করবে।

৩. Conditional Test and Repeated Test Combination

কখনও কখনও আপনি একই টেস্টে conditional এবং repeated test ব্যবহার করতে চাইতে পারেন, যেমন নির্দিষ্ট অবস্থায় টেস্টটি একাধিকবার চালানো।

উদাহরণ: Conditional Test with Repeated Test
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.condition.EnabledIf;

public class ConditionalRepeatedTest {

    @RepeatedTest(3)
    @EnabledIf(expression = "#{systemProperties['os.name'].contains('Linux')}", reason = "Only run on Linux OS")
    void testRepeatedlyOnLinux() {
        System.out.println("This test runs 3 times only on Linux OS");
    }
}

এখানে, @EnabledIf নিশ্চিত করবে যে টেস্টটি শুধুমাত্র Linux OS-এ চালানো হবে, এবং @RepeatedTest(3) সেটি তিনবার চালাবে।


সারাংশ

JUnit 5 এর Conditional Test এবং Repeated Test ফিচারগুলি টেস্টিং পদ্ধতিকে আরও নমনীয় এবং শক্তিশালী করে তোলে।

  • Conditional Tests আপনাকে শর্ত সাপেক্ষে টেস্ট চালানোর সুযোগ দেয়, যেমন কোনো নির্দিষ্ট প্ল্যাটফর্মে টেস্ট চালানো বা কোনো নির্দিষ্ট কন্ডিশনের উপর ভিত্তি করে টেস্ট সক্রিয় বা নিষ্ক্রিয় করা।
  • Repeated Tests একাধিকবার টেস্ট চালানোর সুবিধা দেয়, যা বিশেষভাবে তখন প্রয়োজনীয় হয় যখন আপনি নিশ্চিত হতে চান যে টেস্টটি নির্দিষ্ট সংখ্যক বার সফলভাবে চলেছে।

এভাবে, JUnit 5 এর নতুন অ্যানোটেশন এবং টেস্ট কনফিগারেশন টুলগুলি আপনার টেস্টিং পদ্ধতিকে আরও কার্যকরী এবং সহায়ক করে তোলে।


Content added By
Promotion

Are you sure to start over?

Loading...