উত্তর:
কিছু ক্ষেত্রে যেখানে আমি এটি দরকারী পেয়েছি:
try{ // do stuff... fail("Exception not thrown"); }catch(Exception e){ assertTrue(e.hasSomeFlag()); }
বিঃদ্রঃ:
JUnit4 যেহেতু, একটি ব্যতিক্রম ছোঁড়া হচ্ছে তা পরীক্ষা করার আরও একটি মার্জিত উপায় রয়েছে: টীকাটি ব্যবহার করুন @Test(expected=IndexOutOfBoundsException.class)
যাইহোক, এই না করবে না কাজ করেন তাহলে আপনি ব্যতিক্রম পরিদর্শন করতে চান, তাহলে আপনি এখনও প্রয়োজন fail()
।
আমি মনে করি স্বাভাবিক ব্যবহারের ক্ষেত্রে এটি কল করা যখন কোনও নেতিবাচক পরীক্ষায় ব্যতিক্রম হয় নি।
নিম্নলিখিত সিউডো-কোডের মতো কিছু:
test_addNilThrowsNullPointerException()
{
try {
foo.add(NIL); // we expect a NullPointerException here
fail("No NullPointerException"); // cause the test to fail if we reach this
} catch (NullNullPointerException e) {
// OK got the expected exception
}
}
আমার @ পূর্ব পদ্ধতিতে এমন কিছু ঘটতে পারে যেখানে এমন কিছু ঘটেছে I've
public Object obj;
@Before
public void setUp() {
// Do some set up
obj = new Object();
}
@Test
public void testObjectManipulation() {
if(obj == null) {
fail("obj should not be null");
}
// Do some other valuable testing
}
@Before
পদ্ধতিটি সফল হয়েছে তা নিশ্চিত করতে চান তবে সম্ভবত সরাসরি সেই পদ্ধতিতে এটি পরীক্ষা করা ভাল। একটি বোনাস হিসাবে, কমপক্ষে JUnit এবং TestNG এমনকি @Before
/ @After
পদ্ধতিগুলির ত্রুটিগুলির জন্য পৃথক ব্যর্থতারও রিপোর্ট করবে , সুতরাং দেখতে পাবে যে সমস্যাটি নিজেই পরীক্ষায় ছিল না।
এইভাবে আমি ফেল পদ্ধতিটি ব্যবহার করি।
তিনটি রাজ্য রয়েছে যে আপনার পরীক্ষার কেস শেষ হতে পারে
উদ্দেশ্যযুক্ত (নেতিবাচক পরীক্ষার মামলার মতো যা ব্যতিক্রম হওয়ার প্রত্যাশা করে)।
আপনি যদি সেখানে গ্রহনটি ব্যবহার করছেন তবে তিনটি রাজ্য যথাক্রমে সবুজ, নীল এবং লাল চিহ্নিতকারী দ্বারা নির্দেশিত।
আমি তৃতীয় দৃশ্যের জন্য ব্যর্থ অপারেশনটি ব্যবহার করি।
উদাহরণস্বরূপ: সর্বজনীন পূর্ণসংখ্যার যোগ (পূর্ণসংখ্যা ক, পূর্ণসংখ্যা খ) new নতুন পূর্ণসংখ্যা (a.intValue () + বি.আইনটিভ্যালু ()) ফেরান}
fail()
।
আমি উদাহরণস্বরূপ, fail()
পরীক্ষা শেষ করে এখনও শেষ হয়নি (এটি ঘটে) নির্দেশ করতে ব্যবহার করি; অন্যথায়, তারা সফল হিসাবে প্রদর্শিত হবে।
এটি সম্ভবত এই কারণে যে আমি কোনও ধরণের অসম্পূর্ণ () কার্যকারিতা সম্পর্কে অজ্ঞাত যা নুনিটে বিদ্যমান।
সমবর্তী এবং / অথবা অ্যাসিঙ্ক্রোনাস সেটিংস, আপনি যে নির্দিষ্ট পদ্ধতি যাচাই করতে চান পারে (যেমন প্রতিনিধিদের, ঘটনা শ্রোতাকে, প্রতিক্রিয়া হ্যান্ডেলার, আপনি এটির নাম হয় না) না বলা হয়। ফ্রেমওয়ার্ককে উপহাস করে, আপনি fail()
পরীক্ষাগুলিতে ব্যর্থ হওয়ার জন্য সেই পদ্ধতিগুলিতে কল করতে পারেন । মেয়াদ উত্তীর্ণ সময়সীমা এই জাতীয় পরিস্থিতিতে একটি প্রাকৃতিক ব্যর্থতা শর্ত।
উদাহরণ স্বরূপ:
final CountDownLatch latch = new CountDownLatch(1);
service.asyncCall(someParameter, new ResponseHandler<SomeType>() {
@Override
public void onSuccess(SomeType result) {
assertNotNull(result);
// Further test assertions on the result
latch.countDown();
}
@Override
public void onError(Exception e) {
fail(exception.getMessage());
latch.countDown();
}
});
if ( !latch.await(5, TimeUnit.SECONDS) ) {
fail("No response after 5s");
}
সর্বাধিক গুরুত্বপূর্ণ ব্যবহারের ক্ষেত্রে সম্ভবত ব্যতিক্রম পরীক্ষা করা।
যদিও জুনিট 4 কোনও ব্যতিক্রম ঘটেছে কিনা তা যাচাই করার জন্য প্রত্যাশিত উপাদানটি অন্তর্ভুক্ত করে , মনে হয় এটি নতুন জুনিট 5 এর অংশ নয়। fail()
ওভার ব্যবহার করার আরেকটি সুবিধা expected
হ'ল আপনি এটিকে finally
টেস্ট-কেস ক্লিনআপের অনুমতি দিয়ে একত্রিত করতে পারেন ।
dao.insert(obj);
try {
dao.insert(obj);
fail("No DuplicateKeyException thrown.");
} catch (DuplicateKeyException e) {
assertEquals("Error code doesn't match", 123, e.getErrorCode());
} finally {
//cleanup
dao.delete(obj);
}
যেমনটি অন্য একটি মন্তব্যে উল্লিখিত হয়েছে। আপনি প্রয়োগটি শেষ না করা পর্যন্ত ব্যর্থ হওয়ার জন্য একটি পরীক্ষা করা যুক্তিসঙ্গত বলে মনে হয়।