Я пишу тестовый пример с использованием JUnit
API для метода. Я рассмотрел все сценарии, но тот, который мне тяжело, находится в блоке if
. Когда я нависаю над этой строкой, Cobertura
заявляет 50% 50% для каждого условия, но я не совсем уверен, как это покрыть.Распределение филиалов с JUnit и Mockito
Метод тестируемой:
protected boolean isDateWithinTimelineRange(Calendar date, ServiceContext ctx) {
Calendar end = (Calendar)ctx.getParameter(ServiceConstants.TIMELINE_END);
Calendar start = (Calendar)ctx.getParameter(ServiceConstants.TIMELINE_BEGIN);
if(end != null && start != null) {
if(date.getTimeInMillis() >= start.getTimeInMillis() && date.getTimeInMillis() <= end.getTimeInMillis()) {
return true;
} else {
return false;
}
}
return true;
}
JUnit тест:
@Test
public void testIsDateWithinTimelineRange() throws Exception {
ServiceContext context = Mockito.mock(ServiceContext.class);
Calendar calender = Mockito.mock(Calendar.class);
Mockito.when(context.getParameter(Mockito.anyString())).thenReturn(calender);
TestBaseTimelineProvider provider = new TestBaseTimelineProvider();
boolean answer = provider.isDateWithinTimelineRange(calender, context);
assertNotNull(answer);
assertTrue(provider.isDateWithinTimelineRange(calender, context));
// Testing for NULL condition
context = Mockito.mock(ServiceContext.class);
calender = Mockito.mock(Calendar.class);
Mockito.when(context.getParameter(Mockito.anyString())).thenReturn(null);
provider = new TestBaseTimelineProvider();
answer = provider.isDateWithinTimelineRange(calender, context);
assertNotNull(answer);
assertTrue(provider.isDateWithinTimelineRange(calender, context));
// Start date set to null
context = Mockito.mock(ServiceContext.class);
calender = Mockito.mock(Calendar.class);
ServiceConstants constants = new ServiceConstants();
Mockito.when(context.getParameter(ServiceConstants.TIMELINE_END)).thenReturn(calender);
provider = new TestBaseTimelineProvider();
answer = provider.isDateWithinTimelineRange(calender, context);
assertNotNull(constants);
// End date set to null
context = Mockito.mock(ServiceContext.class);
calender = Mockito.mock(Calendar.class);
constants = new ServiceConstants();
Mockito.when(context.getParameter(ServiceConstants.TIMELINE_BEGIN)).thenReturn(calender);
provider = new TestBaseTimelineProvider();
answer = provider.isDateWithinTimelineRange(calender, context);
assertNotNull(constants);
}
Что меня смущает это параметр date
, что я насмешливый и которая определяет значения для end
и start
переменных.
if(date.getTimeInMillis() >= start.getTimeInMillis() && date.getTimeInMillis() <= end.getTimeInMillis()) {}
- это линия, которую я хочу покрыть.
Благодаря
Вам не нужно указывать, что нужно возвращать в методе 'getTimeInMillis()', например: 'Mockito.when (calender.getTimeInMillis()). ThenReturn (1L);' и отработать это ? В настоящее время вызов 'date.getTimeInMillis()' ничего не возвращает, поскольку объект 'date' был посмеялся, но ничего не было задано для вашего метода getTimeInMillis()' – Draken
. Вы рассмотрели два случая, когда это возвращает true, но никогда не охватывал (два) случая, когда возвращается false (первый элемент не является истинным, или первый элемент true, а второй элемент не является истинным). У вас должен быть хотя бы один и, возможно, два случая, когда вы утверждаетеFalse (provider.isDateWithinTimelineRange) с действительными тестами для этого условия. – user1676075
Да, на самом деле я отлаживал его, поэтому получили те два похожих теста. Я работаю над getTimeMillis(). –