Nói chung
Khi nào bạn có đủ kiểm tra tự động để tự tin vào đường ống tích hợp liên tục của mình?
Câu trả lời có thể trở nên rõ ràng nếu bạn nghĩ về những gì bạn muốn tự tin. Cuối cùng, nó ánh xạ 1-1; mỗi bài kiểm tra làm cho bạn tự tin về một điều mà nó kiểm tra:
- Kiểm thử đơn vị cung cấp cho bạn sự tự tin rằng một lớp (hoặc mô-đun) thực hiện những gì nó được kiểm tra.
- Kiểm thử tích hợp giúp bạn tự tin rằng một số đơn vị làm việc cùng nhau theo cách được kiểm tra.
- Thử nghiệm từ đầu đến cuối giúp bạn tự tin rằng toàn bộ ứng dụng thực hiện một việc nhất định, theo cách nó được mô tả trong thử nghiệm.
Từ cách bạn hình thành câu hỏi của mình, có lẽ bạn đang nghĩ theo nghĩa kinh doanh lớn, ví dụ:
Tôi muốn được tự tin rằng ứng dụng của tôi có thể làm X .
Vì vậy, bạn viết một bài kiểm tra đầu cuối cố gắng thực hiện X và kiểm tra xem nó có thực hiện đúng không.
Cụ thể hơn
Đó là tất cả những gì rất tự giới thiệu, nhưng đó là bởi vì đó là những gì nó đi xuống. Đơn giản là không có nhiều hơn thế.
Ví dụ, hãy tưởng tượng bạn viết một ứng dụng để tạo công thức nấu ăn. Một tính năng là, nếu bạn thêm số lượng khác nhau của một số loại phô mai khác nhau, nó sẽ cung cấp cho bạn nhiệt độ và thời gian chính xác để tất cả chúng tan chảy.
Vì vậy, bạn có thể viết một bài kiểm tra đơn vị cho bạn CheeseMeltCalculator
, nơi bạn cho nó 100g Gouda và 200g phô mai Emmental, và sau đó bạn kiểm tra xem nhiệt độ và thời gian có đúng không. Điều đó có nghĩa là bây giờ bạn có thể tự tin rằng nó CheeseMeltCalculator
hoạt động với 100g Gouda và 200g phô mai. Bây giờ nếu bạn lặp lại thử nghiệm này với 300g Gouda thay vì 200g, bạn có thể khá tự tin rằng nó hoạt động chính xác cho các giá trị khác nhau. Bạn có thể thêm test cho 0
, -1
và int.MaxValue
g Gouda phải tự tin rằng mã không đi lên (hoặc các chuyến đi lên một cách chính xác như dự định) cho đầu vào lạ.
Bạn có thể viết một bài kiểm tra tích hợp để kiểm tra xem nó CheeseMeltCalculator
được kết hợp chính xác vào toàn bộ quá trình tính toán nhiệt độ và thời gian thực phẩm. Nếu điều này sai, nhưng các CheeseMeltCalculator
thử nghiệm ở trên vẫn ổn, bạn có thể tin tưởng rằng lỗi nằm ở các máy tính khác hoặc theo cách kết hợp dữ liệu từ các máy tính khác nhau.
Và cuối cùng bạn có thể viết một bài kiểm tra từ đầu đến cuối để tạo ra toàn bộ công thức, và một trong những điều bạn kiểm tra là nhiệt độ và thời gian kết quả. Nếu 2 cấp độ kiểm tra trước đó đều ổn, nhưng điều này không đúng, thì bạn có thể tự tin rằng các phần đó là chính xác và sai lầm là điều gì đó về cách tính nhiệt độ được tích hợp vào ứng dụng. Ví dụ, có thể đầu vào của người dùng không được chuyển chính xác.
Và cuối cùng , nếu tất cả các thử nghiệm đó đều ổn, thì bạn có thể tự tin rằng " nếu bạn thêm một lượng khác nhau của một số loại phô mai khác nhau, nó sẽ cho bạn nhiệt độ và thời gian chính xác để chúng tan chảy "
Mẩu chuyện dài
Vấn đề là bạn không thể có một bài kiểm tra "nó hoạt động chính xác". Bạn chỉ có thể kiểm tra "Nếu tôi làm X, Y xảy ra".
Tuy nhiên, đây chính xác là thứ cần có trong thông số kỹ thuật cho dự án. Một tuyên bố như " nếu bạn thêm số lượng khác nhau của một số loại phô mai khác nhau, nó sẽ cung cấp cho bạn nhiệt độ và thời gian chính xác để chúng tan chảy " không chỉ mang đến cho khách hàng những kỳ vọng rõ ràng về những gì thành phẩm sẽ làm, mà còn có thể được biến vào các bài kiểm tra tự động.
thông tin bổ sung
Người dùng Richard đã thêm thông tin này trong một chỉnh sửa:
Martin Fowler có một bản tóm tắt rất hay trên trang web của mình về các chiến lược phổ biến nhất: https://martinfowler.com/articles/microservice-testing/
Tôi không muốn xóa cái này, nhưng tôi muốn nói điều này: So với câu trả lời này, nó không phải là một "bản tóm tắt", mà là một lời giải thích sâu sắc hơn nhiều, với đồ họa đẹp và mọi thứ.
Lời khuyên của tôi sẽ là: Nếu mọi thứ có ý nghĩa với bạn sau khi đọc câu trả lời của tôi, bạn đã hoàn thành. Nếu mọi thứ vẫn chưa rõ ràng, hãy đặt một chút thời gian sang một bên và đọc qua bài viết được liên kết.