2.1 Chú thích @Mock

Có hai cách để làm việc với các đối tượng giả trong Mockito. Đầu tiên là tạo một đối tượng hoàn toàn ảo , thứ hai là bọc một đối tượng hiện có trong một trình bao bọc. Hãy bắt đầu với cái đầu tiên.

Để tạo một đối tượng hoàn toàn ảo, bạn cần viết mã:

ClassName variable name = Mockito.mock(ClassName.class);

Hãy tạo một lớp ArrayList giả làm ví dụ:

@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");
    }
}

Trong ví dụ này, chúng tôi tạo một ArrayList giả và lưu trữ tham chiếu đến nó trong biến mockList. Các phương thức của đối tượng này không làm gì cả.

Nhân tiện, mã này có thể được viết ngắn hơn nữa, vì có một chú thích đặc biệt cho điều này @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");
    }
}

Trong trường hợp thứ hai, MockitoExtensionnó sẽ tự phân tích mã lớp và tạo các sơ khai cần thiết. Bạn không cần phải gọi phương thức Mockito.mock(). Một chú thích và đối tượng ảo đã sẵn sàng. Sắc đẹp.

2.2 Chú thích @Spy

Loại đối tượng quan trọng thứ hai trong Mockito là các trình bao bọc trên các đối tượng hiện có. Một mặt, chúng cho phép sử dụng các lớp hiện có và mặt khác, chặn các cuộc gọi đến tất cả các phương thức và biến của các đối tượng đó: để sửa công việc của chúng khi cần thiết. Chúng được sử dụng thường xuyên như các đối tượng Mock.

Để tạo một trình bao bọc trên một đối tượng, bạn cần viết mã:

ClassName variable name = Mockito.spy(an object);

Một ví dụ với một trình bao bọc xung quanh lớp 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");
    }
}

Ở dạng đơn giản nhất, một lệnh gọi đến một đối tượng bao bọc chỉ đơn giản là chuyển hướng các lệnh gọi đến đối tượng ban đầu, tham chiếu mà nó giữ bên trong chính nó . Mọi thứ sẽ hoạt động giống như với đối tượng ban đầu.

Bạn cũng có thể tạo trình bao bọc bằng cách sử dụng chú thích - @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");
    }
}

Hai ví dụ mã này là tương đương.