MockitoJUnitRunner
আপনাকে ফ্রেমওয়ার্ক ব্যবহারের স্বয়ংক্রিয় বৈধতা দেওয়ার পাশাপাশি একটি স্বয়ংক্রিয়ভাবে দেয় initMocks()
।
কাঠামোগত ব্যবহারের স্বয়ংক্রিয় বৈধতা থাকার মতো। আপনি যদি এই কোনও ভুল করেন তবে এটি আপনাকে আরও ভাল প্রতিবেদন দেয়।
আপনি স্ট্যাটিক কল when
পদ্ধতি, কিন্তু একটি ম্যাচিং সঙ্গে stubbing শেষ না করেন thenReturn
, thenThrow
বা then
। (নীচের কোডে ত্রুটি 1)
আপনি verify
একটি উপহাসের আহ্বান জানিয়েছেন, তবে যে পদ্ধতি কলটি যাচাই করার চেষ্টা করছেন তা সরবরাহ করতে ভুলবেন না। (নীচের কোডে ত্রুটি 2)
আপনি when
পরে পদ্ধতিটি কল করেন doReturn
, doThrow
বা
doAnswer
একটি মক পাস, কিন্তু আপনি যে পদ্ধতিতে ঝাঁকুনির চেষ্টা করছেন সেটি প্রদান করতে ভুলে যান। (নীচের কোডে ত্রুটি 3)
যদি আপনার কাঠামোর ব্যবহারের বৈধতা না থাকে তবে নিম্নলিখিত ভুলগুলি মকিতো পদ্ধতিতে কল না করা পর্যন্ত এই ভুলগুলি জানানো হয় না । এটি হতে পারে
- একই পরীক্ষা পদ্ধতিতে (নীচে ত্রুটি 1 এর মতো),
- পরবর্তী পরীক্ষা পদ্ধতিতে (নীচে ত্রুটি 2 এর মতো),
- পরবর্তী পরীক্ষা ক্লাসে।
আপনার চালিত সর্বশেষ পরীক্ষায় যদি এগুলি ঘটে থাকে (নীচে ত্রুটির মতো 3) তবে এগুলি মোটেও জানানো হবে না।
এই ধরণের ত্রুটিগুলির প্রতিটি দেখতে কেমন তা এখানে রয়েছে। অনুমান করুন যে এখানে ইউনিত এই তালিকাগুলি তালিকাবদ্ধভাবে চালিয়েছে runs
@Test
public void test1() {
// ERROR 1
// This compiles and runs, but it's an invalid use of the framework because
// Mockito is still waiting to find out what it should do when myMethod is called.
// But Mockito can't report it yet, because the call to thenReturn might
// be yet to happen.
when(myMock.method1());
doSomeTestingStuff();
// ERROR 1 is reported on the following line, even though it's not the line with
// the error.
verify(myMock).method2();
}
@Test
public void test2() {
doSomeTestingStuff();
// ERROR 2
// This compiles and runs, but it's an invalid use of the framework because
// Mockito doesn't know what method call to verify. But Mockito can't report
// it yet, because the call to the method that's being verified might
// be yet to happen.
verify(myMock);
}
@Test
public void test3() {
// ERROR 2 is reported on the following line, even though it's not even in
// the same test as the error.
doReturn("Hello").when(myMock).method1();
// ERROR 3
// This compiles and runs, but it's an invalid use of the framework because
// Mockito doesn't know what method call is being stubbed. But Mockito can't
// report it yet, because the call to the method that's being stubbed might
// be yet to happen.
doReturn("World").when(myMock);
doSomeTestingStuff();
// ERROR 3 is never reported, because there are no more Mockito calls.
}
এখন যখন আমি এই উত্তরটি পাঁচ বছরেরও বেশি সময় আগে লিখেছিলাম, তখন আমি লিখেছিলাম
সুতরাং আমি MockitoJUnitRunner
যেখানেই সম্ভব ব্যবহারের পরামর্শ দেব । যাইহোক, টমাসজ নুরকিউইচস সঠিকভাবে উল্লেখ করেছেন, আপনার যদি অন্য একটি ইউনাইট রানার যেমন স্প্রিংয়ের প্রয়োজন হয় তবে আপনি এটি ব্যবহার করতে পারবেন না।
আমার সুপারিশ এখন পরিবর্তন হয়েছে। আমি প্রথম এই উত্তরটি লেখার পর থেকে মকিতো টিম একটি নতুন বৈশিষ্ট্য যুক্ত করেছে। এটি একটি JUnit বিধি, যা ঠিক একই ফাংশন সম্পাদন করে MockitoJUnitRunner
। তবে এটি আরও ভাল, কারণ এটি অন্যান্য রানারদের ব্যবহারকে বিরত রাখে না।
অন্তর্ভুক্ত করা
@Rule
public MockitoRule rule = MockitoJUnit.rule();
আপনার পরীক্ষা ক্লাসে। এটি উপহাসকে সূচনা করে এবং কাঠামোর বৈধতা স্বয়ংক্রিয় করে তোলে; ঠিক যেমন MockitoJUnitRunner
করে। তবে এখন, আপনি SpringJUnit4ClassRunner
বা অন্য কোনও JUnitRunner ব্যবহার করতে পারেন । মকিতো ২.১.০ এর পরে, এমন অতিরিক্ত বিকল্প রয়েছে যা ঠিক কী ধরণের সমস্যাগুলি রিপোর্ট হতে পারে তা নিয়ন্ত্রণ করে।