public class Clock {
+ private static final DateTimeFormatter DD_MM_YYYY = DateTimeFormatter.ofPattern("dd/MM/yyyy");
+
public String todayAsString() {
- // We need to control this random stuff for our tests. :(
- LocalDate today = LocalDate.now();
- return today.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
+ return today().format(DD_MM_YYYY);
+ }
+
+ // We isolated the randomness in here.
+ protected LocalDate today() {
+ return LocalDate.now();
}
}
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
+import java.time.LocalDate;
+
import org.junit.Test;
public class ClockShould {
@Test public void
return_todays_date_in_dd_MM_yyyy_format() {
- Clock clock = new Clock();
+ Clock clock = new TestableClock();
String date = clock.todayAsString();
assertThat(date, is("04/12/2016"));
}
+ private class TestableClock extends Clock {
+
+ @Override
+ protected LocalDate today() {
+ // We will control the random part of our code
+ // (no need of using spy)
+ return LocalDate.of(2016, 12, 4);
+ }
+ }
}