Có gì là một đơn vị kiểm tra, thực sự? Và có thực sự có một sự phân đôi lớn như vậy trong chơi ở đây?
Chúng tôi làm việc trong một lĩnh vực mà việc đọc theo nghĩa đen một chút qua phần cuối của bộ đệm hoàn toàn có thể làm hỏng chương trình hoặc khiến nó tạo ra kết quả hoàn toàn không chính xác hoặc được chứng minh bằng lỗi TLS "HeartBleed" gần đây, đặt một hệ thống được cho là an toàn mở mà không tạo ra bất kỳ bằng chứng trực tiếp của lỗ hổng.
Không thể loại bỏ tất cả sự phức tạp khỏi các hệ thống này. Nhưng công việc của chúng tôi là, ở mức độ có thể, để giảm thiểu và quản lý sự phức tạp đó.
Là một thử nghiệm đơn vị một thử nghiệm xác nhận, ví dụ, đặt chỗ được đăng thành công trong ba hệ thống khác nhau, một mục nhật ký được tạo và xác nhận Email được gửi đi?
Tôi sẽ nói không . Đó là một sự tích hợp bài kiểm tra . Và những người chắc chắn có vị trí của họ, nhưng họ cũng là một chủ đề khác.
Một thử nghiệm tích hợp hoạt động để xác nhận chức năng tổng thể của toàn bộ "tính năng". Nhưng mã đằng sau tính năng đó nên được chia thành các khối xây dựng đơn giản, có thể kiểm tra, còn gọi là "đơn vị".
Vì vậy, một bài kiểm tra đơn vị nên có phạm vi rất hạn chế.
Điều đó ngụ ý rằng mã được kiểm tra bởi bài kiểm tra đơn vị nên có phạm vi rất hạn chế.
Điều đó ngụ ý thêm rằng một trong những trụ cột của thiết kế tốt là chia vấn đề phức tạp của bạn thành các phần nhỏ hơn, đơn mục đích (trong phạm vi có thể) có thể được kiểm tra cách ly tương đối với nhau.
Những gì bạn kết thúc là một hệ thống được tạo thành từ các thành phần nền tảng đáng tin cậy và bạn biết liệu có bất kỳ đơn vị cơ bản nào của mã bị phá vỡ không vì bạn đã viết các bài kiểm tra phạm vi đơn giản, nhỏ, giới hạn để cho bạn biết chính xác điều đó.
Trong nhiều trường hợp, bạn cũng có thể có nhiều bài kiểm tra cho mỗi đơn vị. Các bài kiểm tra nên đơn giản, kiểm tra một và chỉ một hành vi trong phạm vi có thể.
Khái niệm "kiểm tra đơn vị" kiểm tra logic không tầm thường, phức tạp, phức tạp là, tôi nghĩ, một chút của một oxymoron.
Vì vậy, nếu sự cố thiết kế kiểu cố ý đó xảy ra, thì làm thế nào một thử nghiệm đơn vị trên thế giới có thể đột nhiên bắt đầu tạo ra dương tính giả, trừ khi chức năng cơ bản của đơn vị mã được kiểm tra đã thay đổi? Và nếu điều đó đã xảy ra, thì bạn nên tin rằng có một số hiệu ứng gợn không rõ ràng trong trò chơi. Thử nghiệm bị hỏng của bạn, một thử nghiệm dường như tạo ra dương tính giả, thực sự cảnh báo bạn rằng một số thay đổi đã phá vỡ một vòng tròn phụ thuộc rộng hơn trong cơ sở mã, và nó cần được kiểm tra và sửa chữa.
Một số trong những đơn vị đó (nhiều trong số chúng) có thể cần phải được kiểm tra bằng cách sử dụng các đối tượng giả, nhưng điều đó không có nghĩa là bạn phải viết các bài kiểm tra phức tạp hoặc phức tạp hơn.
Trở lại với ví dụ contrived của tôi về một hệ thống đặt phòng, bạn thực sự có thể không được gửi yêu cầu giảm đến một cơ sở dữ liệu đặt phòng trực tiếp hoặc dịch vụ của bên thứ ba (hoặc thậm chí là một "dev" thể hiện của nó) mỗi khi bạn đơn vị kiểm tra mã của bạn.
Vì vậy, bạn sử dụng giả mà trình bày hợp đồng giao diện tương tự. Các thử nghiệm sau đó có thể xác nhận hành vi của một đoạn mã xác định tương đối nhỏ. Màu xanh lá cây xuống bảng sau đó cho bạn biết rằng các khối bao gồm nền tảng của bạn không bị phá vỡ.
Nhưng logic của các đơn vị kiểm tra cá nhân vẫn đơn giản nhất có thể.