1.1 Thư viện Mockito

Hôm nay chúng ta sẽ làm quen với kiểm tra nâng cao. Cụ thể hơn, với thư viện Mockito . Thậm chí đừng nghĩ đến việc thoát khỏi công việc kinh doanh này.

Đầu tiên, thư viện này là một tiêu chuẩn trong thử nghiệm mùa xuân . Đây thực sự là tiêu chuẩn trong ngành phát triển phụ trợ Java.

Thứ hai, bạn sẽ phải viết các bài kiểm tra cho mã Spring của mình . Cách duy nhất để hiểu rằng chương trình phụ trợ mà bạn đã viết hoạt động như bình thường là gọi các phương thức của API của nó . Và làm điều đó với các bài kiểm tra dễ dàng hơn gấp 10 lần so với khi không có chúng. Bạn sẽ thấy cho chính mình.

Bạn có thể thêm thư viện Mockito vào thư viện của mình pom.xmlbằng mã:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>4.2.0</version>
    <scope>test</scope>
</dependency>

Toàn bộ mã nguồn cho dự án Mockito có thể được tìm thấy trên GitHub .

1.2 Đối tượng giả

Vậy Mockito này là gì và tại sao nó lại tốt như vậy?

Trong quá trình phát triển và phát triển thử nghiệm, rất thường xuyên có nhu cầu đưa một số loại “sơ khai” vào mã thay vì một đối tượng thực.

Ví dụ: mã hoạt động với cơ sở dữ liệu được kiểm tra và thay đổi một số thứ ở đó. Điều tốt là trước mỗi bài kiểm tra, trạng thái của cơ sở dữ liệu này là như nhau (nếu không thì các bài kiểm tra sẽ khác nhau). Và tôi muốn cơ sở đơn giản hơn để nhanh chóng khôi phục các trạng thái này.

Hoặc, ví dụ, bạn đang thử nghiệm một mã gửi tin nhắn SMS hữu ích. Và để gửi thư trực tiếp, anh ấy sử dụng một số loại Cổng SMS trả phí. Sẽ rất tuyệt nếu bạn đưa một số Cổng ảo vào đó để kiểm tra mã, để không gửi hàng trăm tin nhắn SMS cho những người khó hiểu.

Hoặc mã của bạn đang yêu cầu dữ liệu từ các máy chủ web khác mà đơn giản là không có sẵn trên máy chủ thử nghiệm. Hoặc bạn viết mã cho thanh toán trực tuyến cần được kiểm tra 50 lần và chỉ sau đó mới được phép sử dụng trong các kênh tài chính thực.

Tôi nghĩ bạn hiểu ... Các đối tượng ảo, hay còn được gọi là đối tượng sơ khai, là một thứ rất hữu ích.

Và đây là khó khăn - Java có kiểu gõ tĩnh. Điều này có nghĩa là để ReadDatabasegán một tham chiếu đến một đối tượng cho một biến thay vì một đối tượng kiểu VirtualDatabase, bạn cần kế thừa lớp VirtualDatabasetừ RealDatabase.

Sau đó, nó chỉ ra rằng lớp có RealDatabasemột loạt các phương thức và biến riêng lưu trữ các tham chiếu đến các đối tượng thực khác và bạn không thể viết sơ khai bình thường theo cách này. Về lý thuyết thì tốt, nhưng trong thực tế thì đó là ngõ cụt.

Và đây là giải pháp ( bạn có thể đọcDynamicProxy chi tiết hơn ), đã xuất hiện trở lại trong Java 5. Nó cho phép bạn tạo các đối tượng ảo mà trình biên dịch không có gì phải phàn nàn.

Các đối tượng ảo như vậy được gọi là giả (từ từ giả - bố cục). Thư viện Mockito đã có thể đưa công việc với những bản mô phỏng này lên một tầm cao chưa từng có. Do đó, nhân tiện, tên của thư viện.

1.3 @ExtendWith chú thích

Thư viện Mockito hoạt động tuyệt vời với JUnit, nó thậm chí có thể được coi là một phần mở rộng của nó.

Có hai cách để kích hoạt thư viện Mockito trong bài kiểm tra đơn vị của bạn. Cách đầu tiên là thêm một chú thích đặc biệt:

@ExtendWith(MockitoExtension.class)
public class MockitoAnnotationTest {
    ...
}

Cách thứ hai là kích hoạt công việc của nó bằng cách gọi phương thức openMocks():

public class MockitoAnnotationTest {
    @BeforeEach
    public void init() {
        MockitoAnnotations.openMocks(this);
   }
}

Thông thường, bạn sẽ thấy tùy chọn đầu tiên, nhưng đôi khi sẽ rất hữu ích khi biết rằng có tùy chọn thứ hai.