我正在一个项目中处理一些时间的东西,当我正在实现单元测试时,我不确定我是否发现了错误,或者我是否只是误解了文档。 的 javadocs ValueRange.of(long min, long maxSmallest, long maxLargest)
状态:
* @return the ValueRange for min, smallest max, largest max, not null
* @throws IllegalArgumentException if
* the minimum is greater than the smallest maximum,
* or the smallest maximum is greater than the largest maximum
我读到的方式是如果传递给 min 的值大于 maxSmallest 的值,它应该抛出异常。但是,以下代码有效:
ValueRange vr = ValueRange.of(5, 2, 10);
我认为这应该失败。 min 的值大于最小最大值的值,但不会引发异常。另外,打印得到的ValueRange时,看起来很奇怪:5 - 2/10
这是一个错误吗?还是我只是不理解 javadocs?
最佳答案
这是一个错误 JDK-8239520并且已经fixed在 JDK 15 中 Build 12 .
我已经基于 ValueRange.of() 创建了单元测试不同取值范围的API:
package org.mycompany.mavenproject1;
import java.time.temporal.ValueRange;
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.function.Executable;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
public class ValueRangeTest {
@ParameterizedTest
@CsvSource({
"5, 2" // the minimum is greater than the maximum
})
public void testFixedValueRange(long min, long max) {
Executable when = () -> ValueRange.of(min, max);
assertThrows(IllegalArgumentException.class, when,
() -> "min: " + min + ", max: " + max);
}
@ParameterizedTest
@CsvSource({
"5, 2, 10", // the minimum is greater than the smallest maximum - THIS FAILS!
"2, 10, 2" // the smallest maximum is greater than the largest maximum
})
public void testVariableValueRange(long min, long maxSmallest, long maxLargest) {
Executable when = () -> ValueRange.of(min, maxSmallest, maxLargest);
assertThrows(IllegalArgumentException.class, when,
() -> "min: " + min + ", maxSmallest: " + maxSmallest + ", maxLargest: " + maxLargest);
}
@ParameterizedTest
@CsvSource({
"5, 1, 2, 10", // the smallest minimum is greater than the smallest maximum
"1, 2, 10, 2", // the smallest maximum is greater than the largest maximum
"1, 11, 2, 10" // the largest minimum is greater than the largest maximum
})
public void testFullyVariableValueRange(long minSmallest, long minLargest, long maxSmallest, long maxLargest) {
Executable when = () -> ValueRange.of(minSmallest, minLargest, maxSmallest, maxLargest);
assertThrows(IllegalArgumentException.class, when,
() -> "minSmallest: " + minSmallest + ", minLargest: " + minLargest + ", maxSmallest: " + maxSmallest + ", maxLargest: " + maxLargest);
}
}
所有场景都通过,但只有一个 -
if the minimum is greater than the smallest maximum
Tests run: 6, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.087 s <<< FAILURE! - in org.mycompany.mavenproject1.ValueRangeTest
testVariableValueRange{long, long, long}[1] Time elapsed: 0.034 s <<< FAILURE!
org.opentest4j.AssertionFailedError: min: 5, maxSmallest: 2, maxLargest: 10 ==> Expected java.lang.IllegalArgumentException to be thrown, but nothing was thrown.
at org.mycompany.mavenproject1.ValueRangeTest.testVariableValueRange(ValueRangeTest.java:30)
这让我相信这是
ValueRange
中的一个错误。 .
关于构造时的 java.time.temporal.ValueRange 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60301507/