Programing

JUnit에서 assertEquals (double, double)이 사용되지 않는 이유는 무엇입니까?

crosscheck 2020. 12. 12. 10:06
반응형

JUnit에서 assertEquals (double, double)이 사용되지 않는 이유는 무엇입니까?


assertEquals(double, double)더 이상 사용되지 않는지 궁금 합니다.

나는 import static org.junit.Assert.assertEquals;JUnit 4.11을 사용 하고 사용했습니다.

아래는 내 코드입니다.

import org.junit.Test;
import static org.junit.Assert.assertEquals;


public class AccountTest {

@Test
public void test() {
    Account checking = new Account(Account.CHECKING);
    checking.deposit(1000.0);
    checking.withdraw(100.0);
    assertEquals(900.0, checking.getBalance());
   }
}

checking.getBalance() 이중 값을 반환합니다.

무엇이 잘못 되었을까요?


double의 정밀도 문제로 인해 더 이상 사용되지 않습니다.

주의 assertEquals(double expected, double actual, double delta)하면 delta정밀도 손실 을 허용하는 또 다른 방법 이 있습니다 .

JavaDoc :

두 개의 double이 양의 델타 내에서 동일하다고 주장합니다. 그렇지 않은 경우 AssertionError가 발생합니다. 기대 값은 델타 값 ignored.NaNs가 동일하다고 무한대 인 경우 : assertEquals(Double.NaN, Double.NaN, *)패스

...

델타-두 숫자가 여전히 동일한 것으로 간주되는 예상과 실제 사이의 최대 델타입니다.


사람들은 설명하지만 샘플을주지는 않습니다.

@Test
public void WhenMakingDepositAccountBalanceIncreases() {
    Account account = new Account();
    account.makeDeposit(10.0);
    assertEquals("Account balance was not correct.", 10.0, account.getBalance(), 0);
}

0결국;


assertEquals(double, double) 2 개의 double이 동일 할 수 있지만 계산 된 값인 경우 프로세서에서 약간 다른 값을 만들 수 있으므로 더 이상 사용되지 않습니다.

시도하면 실패합니다 : assertEquals(.1 + .7, .8). 이것은 인텔 ® 프로세서를 사용하여 테스트되었습니다 .

더 이상 사용되지 않는 메서드호출하면 호출 이 트리거 fail("Use assertEquals(expected, actual, delta) to compare floating-point numbers");됩니다.


오래된 질문이지만 아직 말하지 않았으며 누군가를 도울 수 있습니다.

com.google.common.math.DoubleMath.fuzzyEquals(double a, double b, double tolerance)두 복식이 서로 얼마나 가까워 야 하는지를 지정할 수있는을 사용할 수 있습니다 .

소수 자릿수가 많은 테스트 결과 값을 하드 코딩하고 싶지 않은 단위 테스트에 매우 편리하다는 것을 알았습니다.

참고 URL : https://stackoverflow.com/questions/33274030/why-is-assertequalsdouble-double-deprecated-in-junit

반응형