AdSense

網頁

2018/2/20

JUnit 4 assertEquals 比較兩個double值

JUnit 4 要比較兩個double值可使用assertEquals(double expected, double actual, double delta)

原本的assertEquals(double expected, double actual)因為double有精度上誤差的問題所以已經deprecated了。

第一個參數double expected為預期的值或結果。
第二個參數double actual為實際的值,用來和第一個參數進行比對。
第三個參數double delta為允許的誤差值,如果參數一和參數二之間的差異範圍在誤差值內(不含誤差值),則參數一和參數二仍視為相同。

請見下面範例。

public class Test {
  
  public Test(){}
  
  @Test
  public void testDouble_1() {
    
    double expected = 3083.60;
    double actual = 3083.60;
    double delta = 0.001;
    
    assertEquals(expected, actual, delta); // pass
  }
  
  @Test
  public void testDouble_2() {
    
    double expected = 3083.60;
    double actual = 3083.6001;
    double delta = 0.001;
    
    assertEquals(expected, actual, delta); // pass
  }
  
  @Test
  public void testDouble_3() {
    
    double expected = 3083.60;
    double actual = 3083.601;
    double delta = 0.001;
    
    assertEquals(expected, actual, delta); // fail
  }

}

在上面範例的testDouble_2()中的差異(0.0001)小於delta=0.001,所以仍通過測試;
testDouble_3()的差異(0.001)不小於delta=0.001,所以沒有通過測試。

數學中Delta通常以三角形符號表示,代表兩數之間的差異或變動,例如ΔT = T2 - T1

如果覺得文章有幫助的話還幫忙點個Google廣告,感恩。


參考:

沒有留言:

AdSense