Java 如何从返回类型为LocalDateTime的方法中的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
// 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
中建立连接。