Tôi đang làm việc với hệ thống sau:
Network Data Feed -> Third Party Nio Library -> My Objects via adapter pattern
Gần đây, chúng tôi đã gặp sự cố khi tôi cập nhật phiên bản thư viện tôi đang sử dụng, trong số những thứ khác, khiến dấu thời gian (mà thư viện bên thứ ba trả về là long
), bị thay đổi từ mili giây sau epoch thành nano giây sau epoch.
Vấn đề:
Nếu tôi viết các bài kiểm tra giả định các đối tượng của thư viện bên thứ ba, bài kiểm tra của tôi sẽ sai nếu tôi mắc lỗi về các đối tượng của thư viện bên thứ ba. Ví dụ, tôi đã không nhận ra rằng dấu thời gian thay đổi độ chính xác, dẫn đến nhu cầu thay đổi trong bài kiểm tra đơn vị, vì giả của tôi trả về dữ liệu sai. Đây không phải là một lỗi trong thư viện , nó đã xảy ra vì tôi đã bỏ lỡ một cái gì đó trong tài liệu.
Vấn đề là, tôi không thể chắc chắn về dữ liệu chứa trong các cấu trúc dữ liệu này bởi vì tôi không thể tạo dữ liệu thực mà không có nguồn cấp dữ liệu thực. Những đối tượng này lớn và phức tạp và có rất nhiều phần dữ liệu khác nhau trong đó. Các tài liệu cho thư viện bên thứ ba là người nghèo.
Câu hỏi:
Làm cách nào tôi có thể thiết lập các thử nghiệm của mình để kiểm tra hành vi này? Tôi không chắc mình có thể giải quyết vấn đề này trong một bài kiểm tra đơn vị, vì bản thân bài kiểm tra có thể dễ dàng sai. Ngoài ra, hệ thống tích hợp lớn và phức tạp và thật dễ dàng bỏ lỡ điều gì đó. Ví dụ, trong tình huống trên, tôi đã điều chỉnh chính xác việc xử lý dấu thời gian ở một số nơi, nhưng tôi đã bỏ lỡ một trong số chúng. Hệ thống dường như đang thực hiện hầu hết các điều đúng trong thử nghiệm tích hợp của tôi, nhưng khi tôi triển khai nó vào sản xuất (có nhiều dữ liệu hơn), vấn đề trở nên rõ ràng.
Tôi không có một quy trình cho các bài kiểm tra tích hợp của mình ngay bây giờ. Kiểm tra về cơ bản là: cố gắng giữ cho đơn vị kiểm tra tốt, thêm nhiều thử nghiệm khi mọi thứ bị hỏng, sau đó triển khai đến máy chủ thử nghiệm của tôi và đảm bảo mọi thứ có vẻ lành mạnh, sau đó triển khai vào sản xuất. Vấn đề dấu thời gian này đã vượt qua các bài kiểm tra đơn vị vì các giả được tạo sai, sau đó nó đã vượt qua bài kiểm tra tích hợp vì nó không gây ra bất kỳ vấn đề rõ ràng, tức thời nào. Tôi không có bộ phận QA.
Timestamp
lớp (có chứa bất kỳ đại diện họ muốn) và cung cấp phương pháp đặt tên ( .seconds()
, .milliseconds()
, .microseconds()
, .nanoseconds()
) và các nhà xây dựng quá trình đặt tên. Sau đó sẽ không có vấn đề.