Я пытаюсь высмеять класс DateTimeFormatter. Я сделал следующее:Mock java.time.format.DateTimeFormatter class
@RunWith(PowerMockRunner.class)
@PrepareForTest({DateTimeFormatter.class})
public class UnitTest {
private DateTimeFormatter mockDateFormatter;
private AwesomeClass awesomeClass;
@Before
public void setUp() {
mockDateFormatter = PowerMockito.mock(DateTimeFormatter.class);
awesomeClass = new AwesomeClass(mockDateFormatter);
}
@Test
public void shouldToTestSomethingAwesome() {
// Other test code
PowerMockito.when(mockDateFormatter.format(any(LocalDate.class)))
.thenReturn("20150224");
// Other test code
}
AwesomeClass
использует его для форматирования LocalDateTime.now(ZoneId.of("UTC"));
. Затем форматированная строка используется для генерации другой строки. Мне нужно убедиться, что строка правильно сгенерирована. Поэтому мне нужно вернуть согласованную дату либо из форматирования, либо изложить статический метод LocalDateTime.now (..)
Что я делаю неправильно?
* Почему вы хотите высмеять 'DateTimeFormatter', из интереса? Почему бы вам не просто использовать настоящую? Я бы опасался чрезмерного насмешки - это может сделать тесты намного более хрупкими (и трудночитаемыми), чем просто использование реального кода или подделок с приблизительным таким же поведением. –
Похоже, что модульное тестирование запускает a-mock для меня .... – duffymo
Класс, в который я передаю форматтер, использует его для форматирования 'LocalDateTime.now (ZoneId.of (« UTC »));'. Затем форматированная строка используется для генерации другой строки. Мне нужно убедиться, что строка правильно сгенерирована. Поэтому мне нужно вернуть согласованную дату либо из форматирования, либо издеваться над 'LocalDateTime.now (..)' static method –