[英]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.