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
'Programing' 카테고리의 다른 글
Node.js – 이벤트 js 72가 처리되지 않은 '오류'이벤트를 발생시킵니다. (0) | 2020.12.12 |
---|---|
UTF8 인코딩이 최대 길이 32766보다 깁니다. (0) | 2020.12.12 |
Mapbox GL JS와 Mapbox.js (0) | 2020.12.12 |
RxJS 맵 연산자 (각도)에서 오류를 발생시키는 방법 (0) | 2020.12.12 |
PL / SQL 블록에서 SELECT 문을 출력 할 수 있습니까? (0) | 2020.12.12 |