dimanche 31 juillet 2016

Test With Mocked Service And DateTime Fail Randomly

I am having a test that fail randomly on Bamboo. The ratio is like 1 fail every 10 builds. It never failed on my local environment.

Here my service 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;

    @Override
    public boolean isEnabled() {
        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);
    }
}

And here my random failing test:

@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());
    }
}

Any help is very much appreciated.

Aucun commentaire:

Enregistrer un commentaire