[英]Why my assertEquals doesn't work?
我正在測試我的一個方法, double getSqrt(double s)
,並具有以下JUnit測試代碼:
@Test
public void testGetSqrt() {
System.out.println("getSqrt");
double s = 16.0;
Calculator instance = new Calculator();
double expResult = 4.0;
double result = 4.000000000052429; // was "instance.getSqrt(s);" here
// now hardcode for test purpose
System.out.println(System.getProperty("java.class.path"));
assertEquals(expResult, result, 0.0);
}
無論我如何改變公差“0.0”,“0.1”,“0.00”,“0.01”,“0.001”......它每次都失敗了....報告如下:
AssertionFailedError:expected:<4.0>; 但是:<4.000000000052429>
我使用的是JUnit 4.12和Hamcrest 1.3。
我的進口:
import org.junit.Test;
import static org.junit.Assert.*;
我使用了錯誤的容差嗎?
控制台上的輸出:
compile-test-single:
Testsuite: descriptivestatisticsapplication.processing.CalculatorTest
getSqrt
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.079 sec
------------- Standard Output ---------------
getSqrt
C:\Java\jdk1.8.0_111\jre\lib\javaws.jar;C:\Java\jdk1.8.0_111\jre\lib\deploy.jar;C:\Java\jdk1.8.0_111\jre\lib\plugin.jar;C:\Users\Z\Documents\NetBeansProjects\DescriptiveStatisticsApplication\build\classes;C:\Program Files\NetBeans 8.2\platform\modules\ext\junit-4.12.jar;C:\Program Files\NetBeans 8.2\platform\modules\ext\hamcrest-core-1.3.jar;C:\Users\Z\Documents\NetBeansProjects\DescriptiveStatisticsApplication\build\test\classes;C:\Program Files\NetBeans 8.2\extide\ant\lib\ant-launcher.jar;C:\Program Files\NetBeans 8.2\extide\ant\lib\ant.jar;C:\Program Files\NetBeans 8.2\extide\ant\lib\ant-junit.jar;C:\Program Files\NetBeans 8.2\extide\ant\lib\ant-junit4.jar
------------- ---------------- ---------------
5月27日更新:
根據評論中的建議進行一些測試后,此單元測試現在可以成功通過。 我認為這個問題可以結束。
我擔心的是我沒有找到任何原因導致它失敗,為什么現在它成功了! 相同的代碼,相同的邏輯! 我唯一做的就是注釋掉一些非重要的行然后再添加它們,更改一些聲明語句序列然后再更改它們。 相同的代碼有不同的行為。 我沒有在構建和運行env和libs中改變任何東西。 這沒有任何意義。 一段代碼的結果應該是可重現的。
Java中的浮點數並不精確,因為您已經看到結果<4.000000000052429>換句話說,您在java中將浮點數設置為4,實際上不是4.您可以使用long或甚至BigInteger來解決此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.