Я принимаю удар по настройке модульных тестов для некоторых классов полезности в проекте, над которым я работаю, и один из классов (содержит информацию о лицензировании) имеет метод что делает определенное определение, основанное на текущем времени.Тестирование единицы измерения с условием на текущее время
т. Е. Лицензия содержит дату истечения срока действия, а строка лицензии проверяет эту дату, но фактическая логика, чтобы узнать, истек ли срок действия лицензии, основана на текущем времени.
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);
}
Таким образом, я не знаю, что делать, так как «новый Date()», что не является статическим критерий.
- Должен ли я не тестировать 'isValid' и просто проверить 'isLicenseStringValid()' и функцию getExpiryDate() 'отдельно?
- Я просто использую лицензионный ключ в тесте с сумасшедшим длительным сроком действия, чтобы у меня были переключения заданий к моменту истечения срока его действия?
- Я пытаюсь высмеять «новую дату()» для некоторого метода getCurrentTime(), чтобы я мог подделать, в какое время это сейчас?
Что обычно делают другие люди с тестами, которые являются условными по времени?
BTW, я вижу проблему в коде, кроме даты логики: если (экспирации == NULL) { возвращение ложным; } Я не думаю, что вы должны возвращать 'false' в' isExpired() ', если дата истечения равна null. Для получения дополнительной информации прочитайте - https://www.owasp.org/index.php/Fail_securely – Garbage
Это объект лицензии, который имеет два возможных режима: 1. вечный без истечения срока действия (отсюда выше) 2. временный с датой истечения срока действия , так что это правильно, если нет установленной даты истечения срока действия, срок ее действия истек. –