Java 如何在参数化JUnit测试中检查变量是否在数字范围内

Java 如何在参数化JUnit测试中检查变量是否在数字范围内,java,unit-testing,junit,parameterized,Java,Unit Testing,Junit,Parameterized,我正在为一门叫做“信息检索”的课程创建一份关于语言模型的工作表。学生们应该能够检查他们的代码是否产生了正确的答案,所以我设置了两个Junit测试来检查一些情况。因为我想包含多个测试用例,所以我决定使用参数化Junit测试。(我举了这个例子:) 我想测试一个函数,它返回的浮点值可以在一个数字范围内。如果我要测试两个浮动,我将能够使用 assertEquals(预期浮动、实际浮动、浮动增量) 其中delta是范围。 但是因为我使用的是参数化测试,所以我必须处理对象 assertEquals(预期对象

我正在为一门叫做“信息检索”的课程创建一份关于语言模型的工作表。学生们应该能够检查他们的代码是否产生了正确的答案,所以我设置了两个Junit测试来检查一些情况。因为我想包含多个测试用例,所以我决定使用参数化Junit测试。(我举了这个例子:) 我想测试一个函数,它返回的浮点值可以在一个数字范围内。如果我要测试两个浮动,我将能够使用

assertEquals(预期浮动、实际浮动、浮动增量)

其中delta是范围。 但是因为我使用的是参数化测试,所以我必须处理对象

assertEquals(预期对象,实际对象)

这些对象是包含浮动的列表,但在代码中它们只是对象,因此类似的解决方案不起作用:

assertEquals(预期对象、实际对象、浮点增量)
(此方法不存在)


assertTrue(Math.abs(Object expected-Object actual)您可以编写自己的方法来进行比较,并让该方法返回true或false

assertTrue(objectsAreInRange(actual, expected, delta));

boolean objectsAreInRange(Object actual, Object expected, float delta){
...
}

用户已经给出了答案,但如果需要特殊断言,只需扩展断言并编写自己的实现:

public class OwnAssert extends Assert {

    public static void assertEqualsList(Object listOfFloatExpected, Object listOFFloatActual, float delta){
        ...
    }

}
公共静态断言范围(字符串消息、预期浮点、浮点增量、实际浮点){
if(δ<0){
delta=-delta;
}
如果(实际<预期-增量)
Assert.fail(消息+实际+”小于“+预期+”-“+增量);
如果(实际>预期+增量)
Assert.fail(消息+实际+”大于“+预期+”+“+增量);
}
公共静态断言范围(预期浮点、浮点增量、浮点实际){
断言范围(预期、增量、实际);
}

保持参数顺序与Junit约定一致,提供尽可能完整的错误消息。

assertInRange(消息,预期,增量,实际)
以获得更好的错误消息和Junit参数顺序。当然。感谢您轻松地解决了此问题。另外:速度很快。
public static assertInRange(String message, float expected, float delta, float actual) {
   if (delta < 0) {
     delta = -delta;
   }
   if (actual < expected - delta)
     Assert.fail(message + actual + " is less than " + expected + " - " + delta);
   if (actual > expected + delta) 
     Assert.fail(message + actual + " is more than " + expected + " + " + delta);
}

public static assertInRange(float expected, float delta, float actual) {
  assertInRange(expected, delta, actual);
}