테스트나 assertEquals에 double을 지정할 때는 주의
테스트를 작성하고 있을 때, 에러가 발생했기 때문에 「어째서일까」라고 여러가지 조사하고 있으면, 이해가 진행되었으므로 정리해 보았습니다.
이번 프로그램
이번에 작성한 프로그램은 자주 있는 BMI를 산출하는 사람입니다.
study.java
public class study {
public static void main(String[] args) {
}
public static double calcBMI(int weight, double height){
double BMI;
BMI = weight / height / height;
return BMI;
}
이에 대해 테스트 프로그램을 작성.
studyTest.java
import org.junit.Test;
import static org.junit.Assert.*;
public class studyTest {
@Test
public void calcBMI() {
assertEquals(21.798202394816208, drill01.calcBMI(73, 1.83));
}
}
IntelliJ상이라고 이런 느낌. 항목의 해설이 나오므로 알기 쉽다.
일단 테스트 실행
이 시점에서 왠지 에러가 나오고 있습니다만, 신경쓰지 않고 이 테스트 코드를 우선 실행해 보겠습니다.
그러면 오류가 발생합니다.
java.lang.AssertionError: Use assertEquals(expected, actual, delta) to compare floating-point numbers
라고 했습니다.정석대로 오류 코드를 구구합니다.
대체로 에러 전문으로 구그하면 영어의 기사라든지 질의 응답만 나오구나-. 라고 생각하면, 그런 일본어 기사를 발견했습니다. (영어 공부하라···)
분명히 double 유형을 비교할 때는 오차를 고려해야하며 assertEquals로 처리 할 때 인수에 허용 값을 설정해야합니다.
double 형의 어설션에서의 함정 | DevelopersIO
Assert#assetEquals 메서드 사용
JUnit3계의 메소드입니다만, assetEquals 메소드를 이용해 비교할 수 있습니다. 그러나 assetEquals(double, double)는 더 이상 사용되지 않으며 assetEquals(double, double, double)를 사용하십시오. 세 번째 인수는 비교할 때 허용되는 오류를 지정합니다. +0.0과 -0.0의 비교이면 오차는 0으로 좋으므로, 다음과 같이 기술할 수 있습니다.
assertEquals(+0.0, -0.0, 0.0);
그것을 알고 나서 오류를 다시 읽어 볼수록 쓰여진 것처럼
Use assertEquals(expected, actual, delta) to compare floating-point numbers
↓Google 번역
부동 소수점 숫자를 비교하려면
assertEquals(expected、actual、delta)
를 사용하십시오.그래서
delta
의 위치에 오차를 지정할 필요가 있었던 것 같습니다.실제로 인수를 추가하면,
그래서 테스트를 성공적으로 실행할 수있었습니다. 죄송합니다.
Reference
이 문제에 관하여(테스트나 assertEquals에 double을 지정할 때는 주의), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tao829/items/313ab27ca7ab94a11cf7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)