我有一個在竹上隨機失敗的測試。這個比率就像每10個構建失敗一次。它從未在我的當地環境中失敗。測試隨着模擬服務和日期時間失敗隨機
這裏我的服務semplified:
public final class TripAdvisorSwitchServiceImpl implements TripAdvisorSwitchService{
private FfxProperties ffxProperties = FfxProperties.getInstance();
private DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ");
@Reference
private DateTimeService dateTimeService;
private static boolean forceEnable;
@Override
public boolean isEnabled() {
if (forceEnable) {
return true;
}
String endDateStr = ffxProperties.get("tripadvisor.endDate");
DateTime endDate;
try {
endDate = dateTimeFormatter.parseDateTime(endDateStr);
} catch (IllegalArgumentException e) {
LOG.error("Date format is wrong: {}", endDateStr);
return true;
}
return dateTimeService.getCurrentDateTime().isBefore(endDate);
}
}
在這裏,我隨機失敗的測試:
@RunWith(PowerMockRunner.class)
@PrepareForTest(FfxProperties.class)
public class TripAdvisorSwitchServiceImplTest {
private DateTimeZone utcTimezone = DateTimeZone.forTimeZone(TimeZone.getTimeZone("UTC"));
@InjectMocks
private TripAdvisorSwitchServiceImpl tripAdvisorSwitchService;
@Mock
FfxProperties ffxProperties;
@Mock
DateTimeService dateTimeService;
@Before
public void setup() throws IllegalAccessException {
MockitoAnnotations.initMocks(this);
mockStatic(FfxProperties.class);
when(FfxProperties.getInstance()).thenReturn(ffxProperties);
}
@Test
public void tripAdvisorShouldBeDisabledAfterTheEndDate() {
when(ffxProperties.get("tripadvisor.endDate")).thenReturn("2010-09-14T14:00:00+0000");
when(dateTimeService.getCurrentDateTime()).thenReturn(new DateTime(2016, 9, 14, 14, 1, 0, 0, utcTimezone));
assertFalse("It should be disabled", tripAdvisorSwitchService.isEnabled());
}
}
任何幫助是非常讚賞。
斷言將失敗,tripAdvisorSwitchService.isEnabled()將返回true。 @InjectMocks將注入模擬。在我的本地dateTimeService.getCurrentDateTime()將始終返回新的DateTime(2016,9,14,14,1,0,0,utcTimezone)。 –