[英]How to assertEquals on a value that is passed in as a String against a value which is a double or float
我的方法如下:
public void variable_equal_to_ratio_of_and(String exp, String numerator, String denominator) {
double numerTotal = 0, denomTotal = 0;
String[] numerArray = numerator.split(",");
String[] denomArray = denominator.split(",");
System.out.println("PCT value " + exp);
for (String iterator: numerArray) {
numerTotal += Double.valueOf(iterator);
}
for (String iterator: denomArray) {
denomTotal += Double.valueOf(iterator);
}
double ratio = (numerTotal * 100) / (numerTotal + denomTotal);
ratio = ratio / 100;
BigDecimal bd = new BigDecimal(ratio).setScale(3, RoundingMode.HALF_DOWN);
double d = bd.doubleValue();
org.junit.Assert.assertEquals(Float.valueOf(exp), d, 0);
}
为了弄清楚我们的客户查看的这个比率的实际值应该是多少,我需要做一些数学运算来获得答案并将该答案存储在双精度或浮点数中,这就是您在此方法中看到的。 问题是我必须对我们的测试框架从 API 中提取的内容进行断言,并且没有有效的方法可以将浮点数/双精度数与 junit.Assert 的字符串进行比较。 我似乎能够将传入的字符串转换为浮点数/双精度值,但是预期值和实际值都必须是相同的小数位数,否则断言失败。
当我将期望值转换为两位小数时,它似乎总是由 DecimalFormat 或 BigDecimal 完成,而我无法将它们传递给断言。
我可以将期望值字符串转换为 2 位小数,但是当我将它作为双精度/浮点数传递给 AssertEquals 时,它会根据需要将其解析为尽可能多的小数。
开发人员将 GoLang 中的比率编码为 Math.round(((123.54999) * 10) / 10); 并告诉我它正在使用这个公式:“float32((float64(float32(number1) * 100 / float32(number2))) / 100)”
但是,我的 QA 负责人已经在 Java 中编写了我们的整个测试框架。
如何保持传递给断言的期望值与我在 BigDecimal 中设置的实际值相同的小数位数?
要断言 2 个浮点值等于某个小数位数,您可以更改assertEquals
上的epsilon
参数(第三个值)
例如,
Assert.assertEquals(Float.valueOf(exp), d, .01);
会断言Float.valueOf(exp)
和d
等效于.01
的 epsilon。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.