При каких обстоятельствах сбой AssertEquals, когда фактические и ожидаемые значения совпадают? - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть тестовый пример для приложения Android, которое проверяет, что время в активности видеопроигрывателя не изменяется при быстрой перемотке пользователя вперед и перемотке видео на 15 секунд назад. Тест работает следующим образом:

  1. Откройте видеопроигрыватель и дайте видео воспроизвести несколько секунд.
  2. Приостановите воспроизведение видео и проверьте метку времени.
  3. Нажмите кнопка «ускоренная перемотка вперед на 15 секунд», а затем кнопка «перемотка на 15 секунд».
  4. Проверьте, совпадает ли новая отметка времени.

Отметка времени указана в формате чч: мм: формат сс. Я использую следующий метод для получения времени воспроизведения в секундах:

    private int getPlayTime() {
        String timestamp = getTimestamp();
        return Integer.parseInt(timestamp.substring(0, 2)) * 3600 +
                Integer.parseInt(timestamp.substring(3, 5)) * 60 +
                Integer.parseInt(timestamp.substring(6)) ;
    }

getTimestamp() получает строку метки времени из представления Android:

    private String getTimestamp() {
        AppCompatTextView playTime = (AppCompatTextView) solo.getView(/* View ID */);
        return (String) playTime.getText();
    }

А вот утверждение утверждение:

assertEquals("Rewinding should bring us back 15 seconds. Start = " + startTime + ", end = " + endTime, startTime, endTime);

Хотя значения одинаковы, AssertEquals() иногда возвращает ошибку: java.lang.AssertionError: Time should advance by 15 seconds. Start = 37, end = 37

Это происходит менее 10% времени и не может быть легко воспроизведено. Я полностью потерян для объяснения. Может ли это быть ошибка JUnit?

1 Ответ

1 голос
/ 28 февраля 2020

Ваше утверждение, похоже, исходит из какого-то другого контрольного примера, сработавшего при нажатии кнопки вперед, на основе вашего описания.

...