MockitoJUnitRunner
initMocks()
จะช่วยให้คุณตรวจสอบอัตโนมัติของการใช้กรอบเช่นเดียวกับอัตโนมัติ
การตรวจสอบการใช้งานเฟรมเวิร์กโดยอัตโนมัตินั้นคุ้มค่าที่จะมี ช่วยให้คุณรายงานได้ดีขึ้นหากคุณทำผิดพลาดอย่างใดอย่างหนึ่งเหล่านี้
คุณเรียกคงwhen
วิธีการ แต่ไม่เสร็จสมบูรณ์ stubbing กับการจับคู่thenReturn
, หรือ thenThrow
(ข้อผิดพลาด 1 ในโค้ดด้านล่าง)then
คุณเรียกverify
ล้อเลียน แต่ลืมระบุวิธีการโทรที่คุณพยายามตรวจสอบ (ข้อผิดพลาด 2 ในโค้ดด้านล่าง)
คุณเรียกใช้when
วิธีหลังdoReturn
, doThrow
หรือ
doAnswer
และผ่านการเยาะเย้ย แต่ลืมที่จะให้วิธีการที่คุณกำลังพยายามที่จะต้นขั้ว (ข้อผิดพลาด 3 ในโค้ดด้านล่าง)
หากคุณไม่มีการตรวจสอบการใช้งานเฟรมเวิร์กข้อผิดพลาดเหล่านี้จะไม่ถูกรายงานจนกว่าจะมีการเรียกใช้เมธอด Mockito ต่อไปนี้ นี่อาจจะเป็น
- ในวิธีการทดสอบเดียวกัน (เช่นข้อผิดพลาด 1 ด้านล่าง)
- ในวิธีการทดสอบถัดไป (เช่นข้อผิดพลาด 2 ด้านล่าง)
- ในชั้นเรียนการทดสอบถัดไป
หากเกิดขึ้นในการทดสอบครั้งล่าสุดที่คุณเรียกใช้ (เช่นข้อผิดพลาด 3 ด้านล่าง) จะไม่มีการรายงานเลย
ข้อผิดพลาดแต่ละประเภทอาจมีลักษณะดังนี้ สมมติว่า JUnit รันการทดสอบเหล่านี้ตามลำดับที่ระบุไว้ที่นี่
@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
ทุกที่ที่เป็นไปได้ อย่างไรก็ตามตามที่ Tomasz Nurkiewicz ได้ระบุไว้อย่างถูกต้องคุณจะไม่สามารถใช้งานได้หากคุณต้องการนักวิ่ง JUnit คนอื่นเช่น Spring
คำแนะนำของฉันเปลี่ยนไปแล้ว ทีม Mockito ได้เพิ่มฟีเจอร์ใหม่ตั้งแต่ฉันเขียนคำตอบนี้เป็นครั้งแรก เป็นกฎ JUnit ซึ่งทำหน้าที่เดียวกับไฟล์MockitoJUnitRunner
. แต่จะดีกว่าเพราะมันไม่ได้กีดกันการใช้งานของนักวิ่งคนอื่น ๆ
ประกอบด้วย
@Rule
public MockitoRule rule = MockitoJUnit.rule();
ในชั้นเรียนทดสอบของคุณ สิ่งนี้เริ่มต้นการล้อเลียนและทำการตรวจสอบความถูกต้องของกรอบงานโดยอัตโนมัติ เช่นเดียวกับMockitoJUnitRunner
ไม่ แต่ตอนนี้คุณสามารถใช้SpringJUnit4ClassRunner
หรือ JUnitRunner อื่น ๆ ได้เช่นกัน ตั้งแต่ Mockito 2.1.0 เป็นต้นไปมีตัวเลือกเพิ่มเติมที่ควบคุมประเภทของปัญหาที่ได้รับรายงาน