Как сделать так, чтобы этот тест на джунит в год-2038 работал должным образом - PullRequest
0 голосов
/ 21 мая 2019

Я пишу некоторый код, который перестанет работать после 19 января 2038 года из-за Year_2038_problem при переполнении java Date, поэтому я мог бы создать тест junit, который в 2036 году начнет давать сбой, чтобы дать мне 2 года, чтобы это исправить.

Чтобы сначала создать провальный тест, я добавил 25 лет и был удивлен, что тест не провалился.

@Test
public void warn2038Overflow() {
    Calendar c = Calendar.getInstance();
    c.add(Calendar.YEAR, 25);

    // today is 2019 plus 25 years becomes 2044 which should overflow
    assertEquals("No calendar overflow", true,
            c.getTimeInMillis() > 0l);
}

Любые подсказки, почему это не подводит?

Я использую Android-Studio-3.4.1 с java-1.8.0_152 (64-разрядная версия) с 'junit: junit: 4.12' и 'androidx.test: runner: 1.1.0'

1 Ответ

5 голосов
/ 21 мая 2019

Проблема Year-2038 возникает, когда вы сохраняете количество секунд эпох в 32-разрядном целом числе со знаком (которое будет переполнено в 2038 году).

Используемый вами код хранит количество миллисекунд в 64-разрядном целом числе со знаком. Это все еще будет хорошо работать некоторое время .

...