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