Не издевайтесь над этим - вместо этого введите метод, который вы можете издеваться над датами. Что-то вроде этого:
interface Utility {
Date getDate();
}
Utilities implements Utility {
public Date getDate() {
return Calendar.getInstance().getTime();
}
}
Затем вы можете привнести это в классе или просто использовать вспомогательный класс с кучей статических методов с помощью метода загрузки для интерфейса:
public class AppUtil {
private static Utility util = new Utilities();
public static void load(Utility newUtil) {
this.util = newUtil;
}
public static Date getDate() {
return util.getDate();
}
}
Тогда в вашем приложении код:
private void doSomething() {
Date today = AppUtil.getDate();
....
}
После этого вы можете просто загрузить интерфейс с макетами в свои методы тестирования.
@Test
public void shouldDoSomethingUseful() {
Utility mockUtility = // .. create mock here
AppUtil.load(mockUtility);
// .. set up your expectations
// exercise the functionality
classUnderTest.doSomethingViaAPI();
// ... maybe assert something
}
Смотрите также Should you only mock types you own? и Test smell - everything is mocked
Эта линия не может быть компиляции! – adarshr
Является ли 'today' членом класса (поля) или локальной переменной внутри метода? –
Локальная переменная внутри метода – Randomize