문제

나는 2 차원 데이터의 평등을 테스트하는 것과 관련된 일부 클래스에 대해 일부 테스트 사례를 작성하려고합니다. 여기에 첫 찌르기가 있습니다.

double[][] expected = {
        {0, 104, 0},
        {145.5, 0, 0},
        {83, 0, 0}
};

double[][] actual = someObject.getArray();

이제 Junit에는 플로팅 포인트 문제로 인해 이중 어레이에 대한 '배열'이 없다는 것을 알 수 있습니다 (실제로 델타 대 평등을 사용하고 싶다). 나는 그것을 알아 차린다 주니트 아들 정확히 동등한 지 확인 해야하는 방법이 있습니다.

static void  assertEquals(java.lang.String message, double[] expected, double[] actual, double delta) 

이제 그게 다 좋고 괜찮습니다. 내가 할 수있는 것은 두 사람이 불평등하다고 말하는 것이 아니라 의미있는 오류 메시지를 제공하는 것입니다. 어디 그들은 불평등합니다. 치수를 비교하지 않고 각각의 해당 요소를 반복하고 평등을 테스트하는 쉬운 방법이 있습니까? 의미있는 오류 메시지를 얻기 위해 주장에서 수행되는 것과 같은 일을 해야하는 것은 어리석은 것 같습니다.

도움이 되었습니까?

해결책

나는 당신이 단위 테스트를 계측/디버깅으로 혼합하고 있다고 생각합니다. 단위 테스트의 목적은 객체가 예상대로 작동하는지 확인하는 것입니다. 테스트 사례에 (효과적으로) 계측 인 코드를 포함하는 습관에 들어가면 통과하도록 설계된 테스트 케이스를 작성할 확률이 높아집니다.

당신의 객체는 double[][]. 테스트 사례는 예상대로 작동하지 않는다고 말합니다. 코드를 디버깅 할 시간입니다.

(나는 이것이 논란의 여지가있는 관점 일 수 있음을 이해한다.)

다른 팁

그래서, 당신은 double [] s 또는 double [] [] s를 비교하려고합니까?

Double [] S (1D 어레이)를 비교하는 경우, Junit-Addons를 사용하는 것은 어떻습니까? 기본 오류 메시지가 필요한 것이 아닌가? Double []를 사용하기 위해 테스트를 작성할 수 있다면 대상 []에서 작동하는 Junit의 AsserTarraySequals () 메소드가 작동합니다. 그것은 당신이 의도 한 것이라고 가정 할 때 정확한 평등을 위해 복식을 비교할 것입니다.

Double [] []를 비교하면이 작업 중 어느 것도 없습니다. Double [] []는 객체 []이지만 참조 평등을 사용하기 때문에 개별 이중 [] s를 비교하려고하지 않습니다.

Commons-Lang을 사용하여 비교를 수행 할 수 있지만 차이가 어디에 있는지에 대한 유용한 메시지를 생성하는 데 도움이되지는 않습니다. 이를 위해서는 자신의 방법을 굴려야한다고 생각합니다.

제대로 얻습니까, 당신은 출력을 제외하고 Junit-addons의 Assertequals (String, double [], double [], double) 메소드에 만족합니까?

가정 할 수 있거나 배열 클래스의 소스를 가지고 있거나 얻을 수 있으며, 메소드 (복사 및 붙여 넣기를 먼저 복사하지만 라이센스를 확인)를 다시 구현하고 새로운 사용자 정의 Assertequals 메소드의 출력을 필요에 따라 향상시킵니다. 너무 오래 걸리지 않을 것 같아요!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top