Làm sao để test một ứng dụng springboot trong java

Người dịch: Dương Xuân Long - Học viên lớp Java10
Email liên hệ: linesco218@gmail.com
Bài viết gốc: java67.com
Link Source code: github.com

Trong hướng dẫn này, chúng ta sẽ nói về Khi nào nên dùng và khi nào nên dùng thiết bị khác cho việc kiểm tra. Chúng ta sẽ cũng điều tra những con đường khác nhau để cài đặt lại ứng dụng và làm sao để giảm thời gian chạy test.

Khác nhau giữa Integration Tests và Unit Tests trong Java

Trước khi bắt tay vào điều tra việc kiểm tra với Spring Boot, chúng nên làm nổi bật đặc tính nào làm cho kiểm tra tích hợp khác với kiểm tra đơn vị. Trong khi kiểm tra đơn vị nói về một đơn vị đơn lẻ, nhưng cũng có thể là một nhóm các classes được thử trong một sự trộn lẫn.

Một kiểm tra tích hợp có thể là những hoạt động sau:

Một kiểm tra tích hợp bao hàm nhiều đơn vị(unit).
Nó kiểm tra kết nỗi giữa ít nhất hai nhóm class.Một hoạt động kiểm tra bao hàm nhiều lớp. Đây thực sự là một chuyên môn của trường hợp chinhsvaf có thể bao trùm việc hộ tác giữa các dịch vụ hoạt động và các lớp xác minh, ví dụ.
Một hoạt động kiểm tra có thể gồm mọi mặt của một ứng dụng. Trong những hoạt động kiểm tra này chúng ta gửi một yêu cầu tới ứng dụng và đảm bảo rằng nó trả lời chính xác và đã thay đổi trạng thái dữ liệu trên một giả định của chúng ta.

Spring Boot cho chúng ta đặc tính @SpringBootTest để chúng ta có thể tạo ra một ứng dụng cài đặt chứa mọi phần(đoạn viết ) mà chúng ta muốn cho cácloại kiểm tra ở trên.

Trong cách này, cho những kiểm tra đơn giản mà bao gồm nhiều đơn vị test chúng ta nên tạo ra những kiểm tra đơn giản, cơ bản là những hoạt động kiểm tra đơn vị, trong đó chúng ta có thể tạo ra các lược đồ cho kiểm tra và cách xa những phần còn lại. Cùng những dòng này, Spring không bắt đầu chạy lại ứng dụng mỗi lần kiểm tra.

1. Các mảnh của hoạt động kiểm tra

Chúng ta có thể kiểm tra ứng dụng Spring Boot một cách toàn diện, từng đơn vị,từng lớp. Sử dụng Spring Boot test cut comments chúng ta có thể kiểm tra các lớp một cách độc lập.

Trước khi chúng ta điều tra đặc tính @SpringBootTest toàn diện, chúng ta nên điều tra lời giải thích về test cut để kiểm tra lời nhận định rằng @SpringBootTest là thứ chúng ta cần.

@SpringBootTest xếp chồng phần cái đặt ứng dụng Spring. Ngược lại, một test cut comment sẽ chỉ tải beans được mong chờ để kiểm tra một lớp bất kì. Trong khi làm vậy chúng la có thể tránh những tác động phụ .

p1

2. Đặc tính @WebMvcTest

Quản trị web có rất nhiều ràng buộc, ví dụ , treo trong khi lắng nghe yêu cầu HTTP, chấp nhận thông tin,
gọi lời giải thích hoạt động, mã hóa kết quả, phiên giải một ngoại lệ thành một phản ứng hợp lệ. Chúng ta nên làm ra những hoạt động kiểm tra để kiểm tra lượng lớn chức năng này.

Đặc tính @WebMvcTest test cut explanation sẽ thiết lập ứng dụng với gần như không đủ số lượng các phần và cá thiết kế để kiểm tra các lớp quy ddinnhj của web. Ví dụ, nó sẽ thiết lập @controller’s, @controlleradvice’s, a MockMvc bean, và các thiết kế tự động khác.

Dependencies

dependencies { 
    testCompile('org.springframework.boot:spring-boot-starter-test') 
    testCompile('org.junit.jupiter:junit-jupiter:5.4.0') 
}

p2

3. Tạo ra một ApplicationContext với @SpringBootTest

@SpringBootTest bắt đầu kiểm tra qua một nhóm lớp kiểm tra và sau đó kiểm tra lên trên những cấu trúc nhóm ,tìm kiếm những lớp được kí hiệu với @SpringBootConfiguration từ đó nó sẽ theo để tạo cài đặt ứng dụng.

Lớp này thường là lớp ứng dụng chính vì @SpringBootApplication comment bao gồm @SpringBootConfiguration explanation.Sau đó nó tạo ra ứng dụng giống như ứng dụng sẽ được bắt đầu trong môi trường khởi tạo.

Chúng ta có thể chỉnh cài đặt ứng dụng bằng nhiều cách như miêu tả dưới đây.

Vì chúng ta có tất cả, bao gồm quy định web, lưu trữ dữ liệu Spring, nguồn dữ liệu, @SpringBootTest rất có ích cho kiểm tra tích hợp trong toàn bộ lớp của ứng dụng.

@ExtendWith(SpringExtension.class) 
@SpringBootTest 
@AutoConfigureMockMvc 
class RegisterUseCaseIntegrationTest { 
    
    @Autowired 
    private MockMvc mockMvc; 
    @Autowired 
    private ObjectMapper objectMapper; 
    @Autowired 
    private UserRepository userRepository; 
    @Test 
    void registrationWorksThroughAllLayers() throws Exception { 
        UserResource user = new UserResource("xyz", "xyz@gmail.com"); 
        mockMvc.perform(post("/forums/{forumId}/register", 42L)
                .contentType("application/json") 
                .param("sendWelcomeMail", "true") 
                .content(objectMapper.writeValueAsString(user))) 
                .andExpect(status().isOk()); 
        UserEntity userEntity = userRepository.findByName("xyz"); 
        assertThat(userEntity.getEmail()).isEqualTo("xyz@gmail.com"); 
    } 
}

Ở đây, chúng ta di chuyển @AutoConfigureMockMvc để thêm MockMvc tới cài đặt ứng dụng. Chúng ta dùng đối tượng MockMvc để cho thấy yêu cầu POST tới ứng dụng và kiểm tra rằng nó trả lời đúng tới mẫu.

Chúng ta sau đó, sử dụng UserRepository từ cài đặt ứng dụng để xác minh rằng yêu câù đã dẫn tới thay đổi thông thường trong điều kiện dữ liệu.

4. Thêm Auto-Configurations

Above, we’ve previously seen an auto-design in action:
Ở trên, chúng ta đã thấy những thiết lế tự động.

@SpringBootTest 
@AutoConfigureMockMvc 
class RegisterUseCaseIntegrationTest { 
    ... 
}

Có những phần thiết kế tự động có thể truy cập được mà thêm những beans khác nhau với ứng dụng.
Sau đây là một số ý khác:

@AutoConfigureWebTestClient: Thêm WebTestClient tới ứng dụng ,nó cho phép chúng ta kiểm tra điểm kết thúc máy chủ.

@AutoConfigureTestDatabase: Cho phép chúng ta chạy kiểm tra dữ liệu hơn là cài một cái vào.

@RestClientTest: Nó hữu ích khi chúng ta cần để kiểm tra RestTemplates. Nó cấu hình tự động các phần cần thiết bên cạnh đối tượng MockRestServiceServer hỗ trợ chúng ta với phản ứng từ những yêu cầu tới từ RestTemplate.

@JsonTest: Autoconfigures JSON mappers and classes like JacksonTester or GsonTester. Utilizing these we can check whether our JSON serialization/deserialization is working appropriately or not.Cấu hình tự động JSON mappers và các lớp như JacksonTester hoặc GsonTester.Chúng ta có thể dùng những thứ này để kiểm tra sự chuyển đổi dữ liệu JSON.

5. Tại sao kiểm tra tích hợp lại chậm?

Một dữ liệu code với một lượng lớn đặc tính @SpringBootTest trong kiểm tra, có thể có những phần rìa để chạy. Hỗ trợ kiểm tra Spring đủ khả năng để tạo một môt trường cài đặt ứng dụng và lại dùng nó trong những kiểm tra tiếp theo, tuy nhiên trong sự kiện rằng các kiểm tra khác nhau thì lại cần môi trường cài đặt khác nhau ,nó sẽ tạo ra cá môi trường cài đặt khác nhau cho mỗi kiểm tra nên sẽ tạo ra một số phần ngoài cho mỗi kiểm tra.

Tất cả những lựa chọn được miêu tả ở trên sẽ làm Spring tạo một môi trường cài đặt ứng dụng khác. Vì vậy chúng ta nên tạo ra một sự sắp xếp và sử dụng nó cho tất cả các kiểm tra với mục đích rằng môi trường cài đặt ứng dụng có thể được sử dụng lại.

Nếu bạn hứng thú muốn biết thời gian mà hoạt động kiểm tra của bạn dành cho sắp xếp và cài đặt ứng dụng Spring, bạn cần xem xét JUnit, thứ mà có thể được nhớ cho gradle hay maven để chuyển báo cáo tốt về việc JUnit 5 tests đầu tư như thế nào.

p5

6. Kết luận.

Đó là tất cả về “Làm sao để kiểm tra ứng dụng Spring Boot trong java”. @SpringBootTest là một chiến lược rất có ích để thiết lập môi trường cài đặt ứng dụng cho hoạt động kiểm tra.