java শর্তসাপেক্ষে JUnit পরীক্ষা 4 উপেক্ষা




unit-testing ignore (4)

ঠিক আছে, তাই @Ignore টীকাটি পরীক্ষার ক্ষেত্রে চালানো উচিত নয় তা চিহ্নিত করার জন্য ভাল।

যাইহোক, কখনও কখনও আমি রানটাইম তথ্য উপর ভিত্তি করে একটি পরীক্ষা উপেক্ষা করতে চান। একটি উদাহরণ হতে পারে যদি আমার একটি কনকুরেন্স পরীক্ষা থাকে যা একটি নির্দিষ্ট সংখ্যক কোর সহ একটি মেশিনে চালানো দরকার। যদি এই পরীক্ষাটি ইউনিকপ্রসেসর মেশিনে চালানো হয় তবে আমি মনে করি না যে পরীক্ষাটি পাস করা ঠিক হবে (যেহেতু এটি চালানো হয়নি), এবং অবশ্যই পরীক্ষাটি ব্যর্থ হওয়া এবং বিল্ড ভাঙ্গার অধিকার নেই। ।

তাই আমি রানটাইমতে পরীক্ষাগুলি উপেক্ষা করতে সক্ষম হতে চাই, কারণ এটি সঠিক ফলাফলের মত মনে হয় (যেহেতু পরীক্ষার কাঠামো বিল্ডটি পাস করার অনুমতি দেয় তবে পরীক্ষাগুলি চালানো হয়নি তা রেকর্ড করে)। আমি মোটামুটি নিশ্চিত যে টীকাটি আমাকে এই নমনীয়তাটি দেবে না, এবং সন্দেহ করে যে আমি ক্লাসে প্রশ্নটির জন্য পরীক্ষা স্যুট তৈরি করতে হবে। যাইহোক, ডকুমেন্টেশানটি এর সম্পর্কে কিছু উল্লেখ করে না এবং API দেখছে তা প্রোগ্রামিয়ালিকভাবে কীভাবে করা হবে তাও স্পষ্ট নয় (অর্থাত আমি কিভাবে প্রোগ্রামিক্যালভাবে Test বা অনুরূপ একটি উদাহরণ তৈরি করব যা @Ignore দ্বারা তৈরি হয় ?)।

যদি কেউ অতীতে একই রকম কিছু করে থাকে অথবা আমি কিভাবে এই সম্পর্কে আরও যেতে পারি সে সম্পর্কে একটি উজ্জ্বল ধারনা আছে, আমি এটি সম্পর্কে শুনে খুশি হব।


জুনিয়র উপায় রান-টাইম এ org.junit.Assume এটি org.junit.Assume

 @Before
 public void beforeMethod() {
     org.junit.Assume.assumeTrue(someCondition());
     // rest of setup.
 }

আপনি @Before পদ্ধতিতে বা পরীক্ষায় নিজেই এটি করতে পারেন তবে @After পদ্ধতিতে নয়। আপনি যদি পরীক্ষায় এটি নিজে করেন তবে আপনার @Before পদ্ধতিটি চালানো হবে। আপনি ক্লাস @BeforeClass বাধা @BeforeClass জন্য @BeforeClass এটি করতে পারেন।

একটি অনুমান ব্যর্থতা পরীক্ষা উপেক্ষা করা হবে।

সম্পাদন করুন: জুনিট-এক্সটি থেকে @ @RunIf সাথে তুলনা করার জন্য, তাদের নমুনা কোডটি এই রকম দেখাবে:

@Test
public void calculateTotalSalary() {
    assumeThat(Database.connect(), is(notNull()));
    //test code below.
}

উল্লেখ্য যে Database.connect() পদ্ধতি থেকে সংযোগটি ক্যাপচার করা এবং সংযোগটি ব্যবহার করা অনেক সহজ।


একটি দ্রুত নোট: Assume.assumeTrue(condition) বাকি ধাপগুলি উপেক্ষা করে তবে পরীক্ষাটি পাস করে। পরীক্ষা ব্যর্থ করতে, শর্তাধীন বিবৃতির মধ্যে org.junit.Assert.fail() ব্যবহার করুন। Assume.assumeTrue() মত একই কাজ কিন্তু পরীক্ষা ব্যর্থ হয়।


আপনি Junit-ext প্রকল্প চেক আউট করা উচিত। তাদের RunIf টীকা রয়েছে যা শর্তাধীন পরীক্ষাগুলি সম্পাদন করে, যেমন:

@Test
@RunIf(DatabaseIsConnected.class)
public void calculateTotalSalary() {
    //your code there
}

class DatabaseIsConnected implements Checker {
   public boolean satisify() {
        return Database.connect() != null;
   }
}

[কোড টিউটোরিয়াল তাদের টিউটোরিয়াল থেকে নেওয়া]


JUnit 4 এ, আপনার জন্য অন্য একটি বিকল্পটি যাতে আপনার কাস্টম মানদন্ড পূরণ করার প্রয়োজন হয় তা বোঝানোর জন্য একটি বিকল্প তৈরি করতে পারে, তারপরে নিজের সাথে ডিফল্ট রানার প্রসারিত করতে এবং প্রতিফলন ব্যবহার করে, কাস্টম মানদণ্ডের উপর আপনার সিদ্ধান্তকে ভিত্তি করে। এটি এমন কিছু দেখতে পারে:

public class CustomRunner extends BlockJUnit4ClassRunner {
    public CTRunner(Class<?> klass) throws initializationError {
        super(klass);
    }

    @Override
    protected boolean isIgnored(FrameworkMethod child) {
        if(shouldIgnore()) {
            return true;
        }
        return super.isIgnored(child);
    }

    private boolean shouldIgnore(class) {
        /* some custom criteria */
    }
}




ignore