LINUX.ORG.RU
ФорумTalks

Тесты, время, жаба

 ,


0

1

Сейчас словил забавный баг, хотя и не баг это, но поржал. От предыдущего разраба осталась часть проекта и пачка юнит-тестов. Один из тестов тупо проверяет что часовые зоны хельсинки и стокгольма все такие же, какие и были (ну ок, хочет человек точно знать что политики еще не сдвинули пространство-время, без проблем). Тест выглядит по типу assertEquals(helTime, stTime - offset).

Вот сейчас словил фейл этого теста. Суть выражается одной строкой.

TimeUtilityTest.testGetCalendar:1->testGetCalendar_aroundBody0:28 expected:<1467378045303> but was:<1467378045304>

Нежданчик вышел. Поржал, короче. А вот если серьезно - как можно провести такой тест чтоб он был хоть немного логичен, но при этом 100% не упал даже если вместо солнца ад и израиль взойдут? Даже если округлять до секунд/минут/часов- все равно есть 0.0(0)1% шанс что палка выстрелит и именно в эту наносекунду пройдет четко половина секунды/минуты/часа.

★★★★★

Взять разницу между полученными значениями?

HerrWeigel ★★★★
()

Даже если округлять до секунд/минут/часов- все равно есть 0.0(0)1% шанс что палка выстрелит и именно в эту наносекунду пройдет четко половина секунды/минуты/часа.

Округлять нужно разницу между датами, а не каждую дату отдельно, тогда никакой там вероятности не будет. Всё равно редко кто время двигает на одну минуту назад/вперёд.

Sadler ★★★
()
Ответ на: комментарий от Deleted

Что-то типа такого:

import java.util.Date;
import java.util.TimeZone;

interface Test{
    int HOUR = 60 * 60 * 1000;

    static void main(String[] args) {
        assert getOffset("Europe/Stockholm", "Europe/Helsinki") == HOUR;
        assert getDstAwareOffset("Europe/Stockholm", "Europe/Helsinki", new Date()) == HOUR;
        assert getDstAwareOffset("Europe/Moscow", "Europe/Helsinki", new Date()) == 0;
        assert getDstAwareOffset("Europe/Moscow", "Europe/Helsinki", new Date(2016,1,1)) == HOUR;
    }

    static int getOffset(String tmz1, String tmz2){
        return Math.abs(TimeZone.getTimeZone(tmz1).getRawOffset() - TimeZone.getTimeZone(tmz2).getRawOffset());
    }

    static int getDstAwareOffset(String tmz1, String tmz2, Date date){
        return Math.abs(TimeZone.getTimeZone(tmz1).getOffset(date.getTime()) - TimeZone.getTimeZone(tmz2).getOffset(date.getTime()));
    }
}
Deleted
()

смотреть на дельту между датами, а не сами даты. если она микроскопическая - то все окей.

Avial ★★★★★
()

Явно указать возможную погрешность, scalatest например:

stTime - offset  mustBe  helTime +- 5

shahid ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.