JUnit avec Java 8 Horloge


Imaginez que nous ayons la classe suivante que je voudrais tester:

class Times {

    Clock cl = Clock.systemDefaultZone();

    public int changeTime() {
        LocalDate ld = LocalDate.now(cl);
        if(ld.getMonth().equals(Month.OCTOBER))
            return 1;
        if(ld.getMonth().equals(Month.NOVEMBER))
            return 2;
        return 0;
    }
}

Comment puis-je forcer la date à être en novembre et affirmer que la méthode renvoie 2?

J'utilise JUnit et Mockito.

Author: Tunaki, 2015-10-25

1 answers

En supposant qu'il existe un setter pour l'objet Clock dans la classe Times, vous pouvez faire quelque chose comme ceci:

Times times = new Times();
Clock fixedClockInNovember = Clock.fixed(Instant.parse("2015-11-01T00:00:00.00Z"), ZoneId.of("UTC"));
times.setClock(fixedClockInNovember);
assertEquals(2, times.changeTime());

Dans ce code, une horloge fixe est créée. Cela simule un temps constant pour l'instant donné, c'est-à-dire en novembre.

En tant que tel, tout appel à LocalDate.now(clock)renverra toujours la même date en novembre.

 5
Author: Tunaki, 2015-10-25 18:04:07