126 bài viết

Khi nào test tích hợp mới xứng đáng, vì sao RANDOM_PORT là lựa chọn đúng, cache context quyết định bộ test chạy hai phút hay bốn mươi phút — và vì sao @WithMockUser hoàn toàn vô nghĩa ở đây.

Dây chuyền ba phần và luật không có phép kết thúc thì không chạy gì, tính lười cho ngắt sớm và dữ liệu vô hạn, vì sao lọc trước sắp sau nhanh hơn hàng chục lần — và khi nào vòng lặp vẫn thắng.

Mỗi test là một transaction bị rollback, flush và clear quyết định test có chứng minh được gì không, vì sao "xanh trên H2 chết trên production" làm cả đội mất niềm tin — và Testcontainers với @ServiceConnection.

Bốn loại và loại thứ ba hay nhầm nhất, khi nào method reference dễ đọc hơn lambda và khi nào không, cái bẫy NPE nổ ngay lúc tạo reference — cùng nơi nó đáng giá nhất: Comparator và groupingBy.

Slice test nạp đúng tầng web nên mọi service phải khai @MockitoBean, MockMvc gọi thẳng DispatcherServlet không cần server, đây là nơi duy nhất chứng minh @Valid và @ControllerAdvice thật sự chạy — cùng cái bẫy 401 khiến nhiều người bỏ cuộc.

Bốn interface phân biệt bằng hai câu hỏi — nhận gì vào, trả gì ra; biến thể nguyên thủy tránh boxing; vì sao chỉ nên dùng andThen — và khi nào tự viết interface là đúng, kể cả để lách checked exception.

Service là class Java bình thường nên test nó không cần Spring — vài mili-giây thay vì vài giây; Mockito với Mock và InjectMocks, verifyNoInteractions khẳng định điều không xảy ra, và bốn cái bẫy tạo ra test luôn xanh mà vô dụng.

Bốn dạng cú pháp và lý do lược bớt được, vì sao lambda KHÔNG phải anonymous class viết gọn — this trỏ khác chỗ và nó dựng bằng invokedynamic — cùng lý do thật đằng sau luật effectively final.