Java 如何从返回类型为LocalDateTime的方法中的LocalDateTime对象中获取第二个?

Java 如何从返回类型为LocalDateTime的方法中的LocalDateTime对象中获取第二个?,java,unit-testing,junit,Java,Unit Testing,Junit,我在从两个LocalDateTime对象获取秒数时遇到问题 // a timestammp for the time when the connection was established public LocalDateTime establish() { startTime = LocalDateTime.now(); connectionEstablished = true; return startTime; } // timestamp for the t

我在从两个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);
}

感谢您的帮助。谢谢大家!

您正在正确获取两个本地日期时间之间的秒数。测试的目的是确保当第二次调用
建立
时(即当连接已经建立时),
开始时间
不会重置。测试基本上说:

一秒钟后,再次建立连接,开始时间应该是现在之前的1秒(,而不是现在)

您可能应该更改
建立
方法:

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

    return startTime;
}

您正在正确获取两个本地日期时间之间的秒数。测试的目的是确保当第二次调用
建立
时(即当连接已经建立时),
开始时间
不会重置。测试基本上说:

一秒钟后,再次建立连接,开始时间应该是现在之前的1秒(,而不是现在)

您可能应该更改
建立
方法:

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

    return startTime;
}

尝试
assertTrue
而不是
assertEquals

以下是一个例子:

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

请注意,
getSeconds
返回一个
long
值,
1.0
不是
long
值。

而不是
assertEquals
尝试
assertTrue

以下是一个例子:

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

请注意,
getSeconds
返回一个
long
值,
1.0
不是
long
值。

为什么要在等待1秒之前断言它是1秒?junit测试已经给出(不是我提供的),我需要实现这些类,这是我做的,但对于这个测试,我不知道如何继续…哦,我明白了,测试的目的是确保在第二次调用
建立
后不会重置开始时间。为什么你要断言它比现在早1秒,在等待1秒之前?给出了junit测试(它不是我写的)我需要实现这些类,虽然我实现了,但是在这个测试中我不知道如何继续…哦,我明白了,测试的目的是确保在第二次调用
build
后不会重置开始时间。非常感谢,现在我明白了为什么:)我在getStartTime()和getEndTime中使用了if(!connectionEstablished)()但是它不起作用…@kannzmm2我刚刚意识到你有一个
连接已建立
以及一个
连接已断开
变量。可以同时建立连接和断开连接吗?不能同时建立连接和断开连接吗?我想你可以只使用一个变量h这里。您应该在
getStartTime
中检查
!connectionEstablished
,在
getEndTime
中检查
connectionEstablished
。非常感谢,现在我明白了原因:)我在getStartTime()和getEndTime()中使用了if(!connectionEstablished)但它不起作用…@kannzmm2我刚刚意识到,您有一个
连接已建立
以及一个
连接已断开
变量。能否同时建立和断开连接?不能同时建立连接和断开连接吗?我想你可以只使用一个变量。你应该检查
!在
getStartTime
中建立连接
,在
getEndTime
中建立连接。