Как получить второй из объектов LocalDateTime в методе с типом возврата LocalDateTime? - PullRequest
1 голос
/ 08 ноября 2019

У меня проблема с получением секунд из двух объектов LocalDateTime.

// a timestammp for the time when the connection was established
public LocalDateTime establish() {

    startTime = LocalDateTime.now();
    connectionEstablished = true;

    return startTime;
}

// timestamp for the time when the connection was disconnected
public LocalDateTime disconnect() {

    endTime = LocalDateTime.now();
    connectionDisconnected = true;

    return endTime;
}
// get the second when the connection was established
public LocalDateTime getStartTime() {

}

// get the seconds when the connection was disconnected
public LocalDateTime getEndTime() {

}

В методе getStartTime () и getEndTime тип возвращаемого значения должен быть из LocalDateTime. Я пробовал разные вещи, например, используя Duration.between, используя Temporal в качестве возвращаемого типа, но он не работает, потому что тест Junit выдает ошибку, что тип возвращаемого значения должен быть LocalDateTime.

Вот тест Junit:

    @Test
void test() throws InterruptedException {
    cdr.establish();
    System.out.println(cdr.toString());
    assertTrue(cdr.toString().matches("calling: \\+44 44\\/725 8912, called: \\+1 982\\/543 1201, start: " + TIMESTAMP_PATTERN + ", end: still established"));
    assertEquals(0.0, Duration.between(cdr.getStartTime(), LocalDateTime.now()).getSeconds(), 0.1);
    assertNull(cdr.getEndTime());
    Thread.sleep(1000);
    cdr.establish();
    // it fails here
    assertEquals(1.0, Duration.between(cdr.getStartTime(), LocalDateTime.now()).getSeconds(), 0.1);
    Thread.sleep(1000);
            cdr.disconnect();
    System.out.println(cdr.toString());
    assertTrue(cdr.toString().matches("calling: \\+44 44\\/725 8912, called: \\+1 982\\/543 1201, start: " + TIMESTAMP_PATTERN + ", end: " + TIMESTAMP_PATTERN));
    assertEquals(2.0, Duration.between(cdr.getStartTime(), cdr.getEndTime()).getSeconds(), 0.1);
    Thread.sleep(1000);
    cdr.disconnect();
    assertEquals(2.0, Duration.between(cdr.getStartTime(), cdr.getEndTime()).getSeconds(), 0.1);
}

Любая помощь приветствуется. Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Вместо assertEquals try assertTrue.

Вот пример:

assertTrue(Duration.between(cdr.getStartTime(), LocalDateTime.now()).getSeconds() >= 1L);

Обратите внимание, что getSeconds возвращает значение long, а 1.0не long значение.

0 голосов
/ 08 ноября 2019

Вы правильно получаете количество секунд между двумя локальными датами. Цель теста - убедиться, что при повторном вызове establish (т. Е. Когда соединение уже установлено), startTime не сбрасывается. Тест в основном говорит:

Через секунду установите соединение снова, время начала должно быть на 1 секунду раньше (в отличие от точно сейчас).

Вам, вероятно, следует изменить метод establish:

public LocalDateTime establish() {
    if (!connectionEstablished) { // add this check
        startTime = LocalDateTime.now();
    }
    connectionEstablished = true;

    return startTime;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...