2.1 คำอธิบายประกอบ @Mock
มีสองวิธีในการทำงานกับวัตถุจำลองใน Mockito อย่างแรกคือการสร้างวัตถุเสมือนทั้งหมดอย่างที่สองคือการรวมวัตถุที่มีอยู่ในกระดาษห่อ เริ่มกันที่อันแรก
ในการสร้างวัตถุเสมือนทั้งหมด คุณต้องเขียนโค้ด:
ClassName variable name = Mockito.mock(ClassName.class);
ลองสร้างคลาส ArrayList จำลองเป็นตัวอย่าง:
@ExtendWith(MockitoExtension.class)
class MockTest {
@Test
public void whenNotUseMockAnnotation_thenCorrect() {
List mockList = Mockito.mock(ArrayList.class);
//these methods won't do anything - they are stubs
mockList.add("one");
mockList.add("two");
}
}
ในตัวอย่างนี้ เราสร้าง ArrayList ปลอมและเก็บข้อมูลอ้างอิงไว้ในตัวแปร mockList วิธีการของวัตถุนี้ไม่ได้ทำอะไรเลย
อย่างไรก็ตาม โค้ดนี้สามารถเขียนให้สั้นลงได้เนื่องจากมีคำอธิบายประกอบพิเศษสำหรับสิ่ง@Mock
นี้
@ExtendWith(MockitoExtension.class)
class MockTest {
@Mock
List mockList;
@Test
public void whenNotUseMockAnnotation_thenCorrect() {
//these methods won't do anything - they are stubs
mockList.add("one");
mockList.add("two");
}
}
ในกรณีที่สองMockitoExtension
จะวิเคราะห์รหัสชั้นเรียนและสร้างโครงร่างที่จำเป็น Mockito.mock()
คุณ ไม่ จำเป็น ต้องเรียกใช้เมธอด คำอธิบายประกอบหนึ่งรายการและวัตถุเสมือนพร้อมแล้ว ความงาม.
2.2 คำอธิบายประกอบ @Spy
วัตถุประเภทที่สองที่สำคัญใน Mockito คือการห่อหุ้มวัตถุที่มีอยู่ พวกเขาอนุญาตให้ใช้คลาสที่มีอยู่และในทางกลับกันเพื่อสกัดกั้นการเรียกใช้เมธอดและตัวแปรทั้งหมดของวัตถุดังกล่าว: เพื่อแก้ไขงานของพวกเขาเมื่อจำเป็น มีการใช้บ่อยพอๆ กับวัตถุจำลอง
ในการสร้าง wrapper บนวัตถุ คุณต้องเขียนโค้ด:
ClassName variable name = Mockito.spy(an object);
ตัวอย่างที่มีตัวห่อหุ้มรอบคลาส ArrayList:
@ExtendWith(MockitoExtension.class)
class SpyTest {
@Test
public void whenMockAnnotation() {
List<String> mockList = Mockito.spy(new ArrayList<String>());
//these methods will work!
mockList.add("one");
mockList.add("two");
}
}
ในรูปแบบที่ง่ายที่สุด การเรียกไปยังวัตถุห่อหุ้มเพียงแค่เปลี่ยนเส้นทางการเรียกไปยังวัตถุดั้งเดิม ซึ่งเป็นการอ้างอิงที่วัตถุอยู่ภายในตัวมันเอง ทุกอย่างจะทำงานเหมือนกับวัตถุดั้งเดิม
คุณยังสามารถสร้าง wrapper โดยใช้คำอธิบายประกอบ@Spy
-
@ExtendWith(MockitoExtension.class)
class SpyTest {
@Spy
List mockList = new ArrayList<String>();
@Test
public void whenMockAnnotation() {
// these methods will work!
mockList.add("one");
mockList.add("two");
}
}
ตัวอย่างโค้ดทั้งสองนี้เทียบเท่ากัน
GO TO FULL VERSION