Skip to content

Instantly share code, notes, and snippets.

@jirkapenzes
Created October 24, 2016 19:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jirkapenzes/9d2dde6a470ecdde2ffd2467cd78ca06 to your computer and use it in GitHub Desktop.
Save jirkapenzes/9d2dde6a470ecdde2ffd2467cd78ca06 to your computer and use it in GitHub Desktop.
import java.util.Date;
public interface DateTimeProvider {
Date getCurrentDate();
}
import java.util.Date;
public class DefaultProvider implements DateTimeProvider {
public Date getCurrentDate() {
return new Date();
}
}
import java.util.Date;
public class FakeTimeProvider implements DateTimeProvider {
public Date getCurrentDate() {
return new Date(2016, 1, 1);
}
}
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Logger {
private DateTimeProvider dateTimeProvider;
private List<Message> messages;
public Logger(DateTimeProvider dateTimeProvider) {
this.dateTimeProvider = dateTimeProvider;
this.messages = new ArrayList<Message>();
}
public void log(String message) {
Date currentTime = dateTimeProvider.getCurrentDate();
messages.add(new Message(currentTime, message));
}
public List<Message> getMessages() {
return messages;
}
}
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.Date;
import static org.mockito.Mockito.*;
import static org.junit.Assert.*;
public class LoggerTest {
@Test
public void shouldLogMessageWithCurrentTime_1() throws Exception {
DateTimeProvider dateTimeProvider = mock(DateTimeProvider.class);
// nez aktualni je lepsi pouzit nejaky fake cas,
// aby kazde spusteni testu pracovalo se stejnym casem
// takto:
// Date currentDate = new Date(2016, 1, 1);
// pro ukazku tu mam ale opravdu aktualni cas:
Date currentDate = new Date();
when(dateTimeProvider.getCurrentDate()).thenReturn(currentDate);
Logger logger = new Logger(dateTimeProvider);
logger.log("Hello message");
Message actualMessage = logger.getMessages().get(0);
Assert.assertEquals(currentDate, actualMessage.getDate());
}
@Test
public void shouldLogMessageWithCurrentTime_2() throws Exception {
DateTimeProvider dateTimeProvider = new FakeTimeProvider();
Logger logger = new Logger(dateTimeProvider);
logger.log("Hello message");
Message actualMessage = logger.getMessages().get(0);
Assert.assertEquals(new Date(2016, 1, 1), actualMessage.getDate());
}
}
import java.util.Date;
public class Message {
private Date date;
private String message;
public Message(Date date, String message) {
this.date = date;
this.message = message;
}
public Date getDate() {
return date;
}
public String getMessage() {
return message;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment