6.1 দাবি

দাবী হল বিশেষ চেক যা কোডের বিভিন্ন জায়গায় ঢোকানো যেতে পারে। তাদের কাজ হল কিছু ভুল হয়েছে তা নির্ধারণ করা। বা বরং, সবকিছু যেমন উচিত তেমন চলছে কিনা তা পরীক্ষা করা। এটি "প্রয়োজন হিসাবে" এবং তারা আপনাকে এটি বিভিন্ন উপায়ে সেট করার অনুমতি দেয়।

আপনি ইতিমধ্যে উপরের কোডে কিছু দাবির সম্মুখীন হয়েছেন। প্রথমটি সমতার জন্য বস্তু পরীক্ষা করছে। বস্তু সমান না হলে, একটি ব্যতিক্রম নিক্ষেপ করা হবে এবং পরীক্ষা ব্যর্থ হবে।

তুলনার ক্রম এখানে গুরুত্বপূর্ণ , কারণ চূড়ান্ত প্রতিবেদনে JUnit এমন কিছু লিখবে "মান 1 পেয়েছে, কিন্তু 3 প্রত্যাশিত ছিল"। এই ধরনের চেকের জন্য সাধারণ বিন্যাস হল:

assertEquals(standard , meaning)

উদাহরণ:

@Test
public void whenAssertingEquality () {
    String expected = "3.1415";
    String actual = "3";

    assertEquals(expected, actual);
}

6.2 পদ্ধতিগুলি assertEquals, assertTrue, assertFalse

নীচে আমি সবচেয়ে জনপ্রিয় পদ্ধতিগুলি তালিকাভুক্ত করব - দাবী। তাদের নাম দ্বারা তারা কিভাবে কাজ করে তা অনুমান করা সম্ভব। তবে আমি যাইহোক একটি সংক্ষিপ্ত ব্যাখ্যা লিখব:

assert Equals দুটি বস্তু সমান তা পরীক্ষা করে
assertArrayEquals দুটি অ্যারেতে সমান মান রয়েছে কিনা তা পরীক্ষা করে
assertNotNull আর্গুমেন্ট শূন্য না হলে চেক করে
assertNull যুক্তিটি শূন্য কিনা তা পরীক্ষা করে
assertNotSame পরীক্ষা করুন যে দুটি আর্গুমেন্ট একই বস্তু নয়
assertSame পরীক্ষা করুন যে দুটি আর্গুমেন্ট একই বস্তু
assertTrue যুক্তিটি সত্য কিনা তা পরীক্ষা করে
assert False যুক্তিটি মিথ্যা কিনা তা পরীক্ষা করে

এই পদ্ধতির কিছু অপ্রয়োজনীয় মনে হয়. কেন assertSame(a, b) ব্যবহার করুন যখন আপনি শুধু assertTrue(a == b) লিখতে পারেন ?

বিন্দু হল যে দাবি একটি খুব স্মার্ট পদ্ধতি. এটি লগে ত্রুটির তথ্য লেখা সহ অনেক দরকারী জিনিস করে । প্রথম ক্ষেত্রে, এটি লিখবে যে বস্তু A প্রত্যাশিত ছিল, কিন্তু অবজেক্ট B গৃহীত হয়েছিল। দ্বিতীয় ক্ষেত্রে, এটি কেবল লিখবে যে সত্য প্রত্যাশিত ছিল ।

যখন আপনার শত শত পরীক্ষা থাকে, বিশেষ করে যেগুলি একটি ডেডিকেটেড টেস্ট সার্ভারে চলছে, বিস্তারিত লগ থাকা খুবই সহায়ক হতে পারে। আমার মনে হয় আপনি বুঝতে পেরেছেন আমি কি বলতে চাইছি।

অ্যারে তুলনা উদাহরণ:

@Test
public void whenAssertingArraysEquality() {
    char[] expected = {'J','u','n','i','t'};
    char[] actual = "Junit".toCharArray();

    assertArrayEquals(expected, actual);
}

6.3 assertAll পদ্ধতি

উপরে উল্লিখিত হিসাবে, assert পদ্ধতি শুধুমাত্র একটি চেক সঞ্চালন করে না, কিন্তু লগের সাথে তুলনীয় বস্তু সম্পর্কে অনেক তথ্যও লেখে।

আসুন একটি তুলনা করা যাক:

Address address = unitUnderTest.methodUnderTest();
assertEquals("Washington", address.getCity());
assertEquals("Oracle Parkway", address.getStreet());
assertEquals("500", address.getNumber());

কিন্তু যদি প্যারামিটারগুলির একটি মেলে না, তবে বাকিগুলি পরীক্ষা করা হবে না। কিন্তু আমি চাই সেগুলি এখনও ঘটুক এবং তাদের ফলাফলগুলি লগে রেকর্ড করা হোক৷ কিন্তু একই সময়ে, যদি অন্তত একটি চেক ব্যর্থ হয়, তাহলে পরীক্ষা এখনও ব্যর্থ হয়।

এর জন্য একটি বিশেষ পদ্ধতি রয়েছে - assertAll() । প্রথম আর্গুমেন্ট হিসেবে, লগ-এ লেখার জন্য একটি মন্তব্য লাগে, এবং তারপর যেকোন সংখ্যক অ্যাসার্ট ফাংশন।

এখানে আমাদের উদাহরণ কিভাবে এটির সাথে পুনরায় লেখা হবে:

Address address = unitUnderTest.methodUnderTest();
assertAll("Complex address comparison script",
    () -> assertEquals("Washington", address.getCity()),
    () -> assertEquals("Oracle Parkway", address.getStreet()),
    () -> assertEquals("500", address.getNumber())
);

তারপর যদি ঠিকানাটি ভুল হয় তবে লগটিতে এরকম কিছু লেখা হবে:

	Complex scenario comparison address (3 failures)
	expected: <Washington> but was: <Seattle>
    expected: <Oracle Parkway> but was: <Main Street>
    expected: <500> but was: <5772>

6.4 assertTimeout পদ্ধতি

@Timeout টীকা মনে আছে ? এটি সম্পূর্ণ পদ্ধতির কার্যকর করার সময় নিয়ন্ত্রণ করার অনুমতি দেয়। তবে কখনও কখনও পদ্ধতির ভিতরে কোডের কিছু অংশ কার্যকর করার উপর বিধিনিষেধ সেট করা কার্যকর। আপনি এটির জন্য assertTimeout() ব্যবহার করতে পারেন ।

সময়টি প্রথম প্যারামিটার হিসাবে পাস করা হয় এবং নির্দিষ্ট সময়ের মধ্যে যে কোডটি (ফাংশন) কার্যকর করতে হবে তা দ্বিতীয় হিসাবে পাস করা হয়। উদাহরণ:

@Test
public void whenAssertingTimeout() {
    assertTimeout(
  	ofSeconds(2),
  	() -> {
    	// pause for one second
    	Thread.sleep(1000);
  	}
	);
}

Assert ক্লাসে assertTimeout() পদ্ধতির 12টি রূপ রয়েছে । আপনি যদি তাদের সম্পর্কে আরও জানতে চান, অফিসিয়াল ডকুমেন্টেশনে স্বাগতম ।

6.5 assertThrows পদ্ধতি

খুব প্রায়ই এমন পরিস্থিতি থাকে যখন আপনাকে নিশ্চিত করতে হবে যে একটি নির্দিষ্ট পরিস্থিতিতে কোডটি সঠিক ব্যতিক্রম ছুঁড়েছে: এটি একটি ত্রুটি সনাক্ত করে এবং সঠিক ব্যতিক্রমটি ছুড়ে দেয়। এটি একটি খুব সাধারণ পরিস্থিতি।

এই ক্ষেত্রে, আরেকটি দরকারী দাবী পদ্ধতি আছে - এটি assertThrows() । এর কলের সাধারণ বিন্যাস হল:

assertThrows(exception , code)

মূলত, এটি assertTimeout() পদ্ধতির অনুরূপ , শুধুমাত্র এটি পরীক্ষা করে যে নির্দিষ্ট কোডটি সঠিক ব্যতিক্রম নিক্ষেপ করে। উদাহরণ:

@Test
void whenAssertingException() {
    Throwable exception = assertThrows(
  	IllegalArgumentException.class,
  	() -> {
      	throw new IllegalArgumentException("Exception message");
  	}
    );
    assertEquals("Exception message", exception.getMessage());
}