我正在创建一个关于“信息检索”课程的语言模型的工作表。学生应该能够检查他们的代码是否产生了正确的答案,所以我设置了几个Junit测试来检查一些案例。因为我想要包含多个测试用例,所以我决定使用参数化的Junit测试。 (我按照这个例子:http://www.mkyong.com/unittest/junit-4-tutorial-6-parameterized-test/) 我想测试一个返回浮点数的函数,该函数可以在范围内的数字。如果我要测试两个花车,我就可以使用
assertEquals(float expected, float actual, float delta)
其中delta是范围。 但因为我使用参数化测试,我必须使用对象
assertEquals(Object expected, Object actual)
这些对象是包含Floats的列表,但在Code中它们只是对象,因此像这样的解决方案不起作用:
assertEquals(Object expected, Object actual, float delta)
(此方法不存在)
assertTrue(Math.abs(Object expected - Object actual)<ERROR_MARGIN)
(运营商' - '未定义对象)
答案 0 :(得分:0)
您可以编写自己的方法进行比较,并返回true或false
assertTrue(objectsAreInRange(actual, expected, delta));
boolean objectsAreInRange(Object actual, Object expected, float delta){
...
}
答案 1 :(得分:0)
用户已经给出了答案,但如果您需要特殊的断言,只需扩展Assert并编写自己的实现:
public class OwnAssert extends Assert {
public static void assertEqualsList(Object listOfFloatExpected, Object listOFFloatActual, float delta){
...
}
}
答案 2 :(得分:0)
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约定一致,尽可能提供最完整的错误消息。