Tôi đang sử dụng thử nghiệm đơn vị cho một số lớp tiện ích trong dự án tôi đang làm việc và một trong các lớp (chứa thông tin cấp phép) có phương pháp thực hiện một số quyết định dựa trên thời gian hiện tại.Kiểm tra đơn vị xử lý với điều kiện trong thời điểm hiện tại
tức là giấy phép chứa ngày hết hạn và chuỗi giấy phép xác thực ngày đó, nhưng lôgic thực tế để xem liệu giấy phép hết hạn có dựa trên thời gian hiện tại hay không.
public boolean isValid()
{
return isLicenseStringValid() && !isExpired();
}
public boolean isExpired()
{
Date expiry = getExpiryDate();
if(expiry == null) {
return false;
}
Date now = new Date();
return now.after(expiry);
}
Vì vậy, tôi không biết phải làm gì, vì điều 'Ngày mới()' không phải là tiêu chí tĩnh.
- Tôi không nên bận tâm kiểm tra 'isValid' và chỉ cần kiểm tra 'isLicenseStringValid()' và hàm 'getExpiryDate()' riêng biệt?
- Tôi có sử dụng khóa cấp phép trong thử nghiệm với thời gian hết hạn điên rồ như vậy mà tôi sẽ chuyển sang công việc vào thời điểm hết hạn không?
- Tôi có cố gắng thử 'Ngày mới()' với phương thức 'getCurrentTime()' để tôi có thể giả mạo thời gian hiện tại không?
Người khác thường làm gì với các thử nghiệm có điều kiện thời gian?
BTW, tôi thấy một vấn đề trong mã của bạn khác so với ngày logic: if (hết hạn == null) { return false; } Tôi không nghĩ bạn nên trả về 'false' trên phương thức' isExpired() 'nếu ngày hết hạn là null. Để biết thêm thông tin, hãy đọc - https://www.owasp.org/index.php/Fail_securely – Garbage
Đó là một đối tượng có giấy phép có hai chế độ có thể: 1. vĩnh viễn không có ngày hết hạn (do đó ở trên) 2. tạm thời với ngày hết hạn vì vậy, chính xác là nếu không có ngày hết hạn được đặt, nó sẽ không hết hạn. –