我如何检查变量是否在参数化 JUnit 测试中的数字范围内
How can i check if a variable is inside a range of numbers in a parameterized JUnit Test
我正在为名为 "Information Retrieval" 的课程创建一个关于语言模型的工作表。学生们应该能够检查他们的代码是否产生了正确的答案,所以我设置了几个 Junit 测试来检查许多情况。因为我想包含多个测试用例,所以我决定使用参数化的 Junit 测试。 (我按照这个例子:http://www.mkyong.com/unittest/junit-4-tutorial-6-parameterized-test/)
我想测试一个函数,其中 returns 一个浮点数可以是 在 一个数字范围内。如果我要测试两个浮点数,我将能够使用
assertEquals(float expected, float actual, float delta)
其中增量是范围。
但是因为我使用的是参数化测试,所以我必须使用 Objects
assertEquals(Object expected, Object actual)
这些对象是包含浮点数的列表,但在代码中它们只是对象,所以像这样的解决方案不起作用:
assertEquals(Object expected, Object actual, float delta)
(此方法不存在)
assertTrue(Math.abs(Object expected - Object actual)<ERROR_MARGIN)
(对象的运算符“-”未定义)
您可以编写自己的方法来进行比较,并让 return 为真或为假
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){
...
}
}
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);
}
保持参数顺序与 Junit 约定一致,尽可能提供最完整的错误消息。
我正在为名为 "Information Retrieval" 的课程创建一个关于语言模型的工作表。学生们应该能够检查他们的代码是否产生了正确的答案,所以我设置了几个 Junit 测试来检查许多情况。因为我想包含多个测试用例,所以我决定使用参数化的 Junit 测试。 (我按照这个例子:http://www.mkyong.com/unittest/junit-4-tutorial-6-parameterized-test/) 我想测试一个函数,其中 returns 一个浮点数可以是 在 一个数字范围内。如果我要测试两个浮点数,我将能够使用
assertEquals(float expected, float actual, float delta)
其中增量是范围。 但是因为我使用的是参数化测试,所以我必须使用 Objects
assertEquals(Object expected, Object actual)
这些对象是包含浮点数的列表,但在代码中它们只是对象,所以像这样的解决方案不起作用:
assertEquals(Object expected, Object actual, float delta)
(此方法不存在)
assertTrue(Math.abs(Object expected - Object actual)<ERROR_MARGIN)
(对象的运算符“-”未定义)
您可以编写自己的方法来进行比较,并让 return 为真或为假
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){
...
}
}
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);
}
保持参数顺序与 Junit 约定一致,尽可能提供最完整的错误消息。