문제

응용 프로그램이 무언가를 올바르게 렌더링 한 경우 하나의 테스트를 어떻게 테스트합니까?

예를 들어 (2d 예) :

Microsoft Word 2007 http://img32.imageshack.us/img32/6197/37841144.png

그림자가 올바르게 배치되거나 올바른 색상 / 개요가 렌더링되었음을 어떻게 알 수 있습니까? 아니면 3D 효과가 방향으로 회전 할 때 올바르게 렌더링되면? 다른 것들이 예술이라는 단어가 다시 크기라면 '정확성'을 어떻게 측정합니까?

도움이 되었습니까?

해결책

몇 가지 방법이 있습니다.

  1. 실제로 렌더링해야 할 내용과 정확히 어떤 방식으로 정확하게 지정된 경우 픽셀을 참조 렌더링과 비교할 수 있습니다.
  2. SVG와 같은 것들의 경우 그렇게 명확하게 지정되지는 않습니다. 여기서 일반적인 접근 방식은 참조 렌더링을 사용하여 손으로 비교하는 것입니다. 둘 다 쉽게 오버레이하고, 하나를 다른 사람으로부터 빼고, 그런 식으로 눈부신 차이를 발견 할 수 있습니다. 하지만 자동 프로세스는 아닙니다.
  3. 화면의 이미지 대신 직접 그려진 이미지를 나타내는 데이터를 볼 수 있습니다. 그려지는 것은 (예에서) 벡터 그래픽입니다. 즉, 잘 정의 된 속성, 모양 및 색상이 있어야하는 몇 가지 모양이 있으며 모양 데이터를 참조와 비교할 수 있습니다. 그런 종류의 일은 자동으로 수행 할 수 있습니다. Google은 비슷한 접근 방식을 사용하여 Chrome의 렌더링을 웹 페이지의 참조 렌더링과 비교합니다. 그들은 픽셀 데이터를 비교하지 않으며, 더 높은 수준의 데이터를 브라우저에서 무엇을 어떻게 비교합니다. ~일 것이다 세우다.

다른 팁

이미지와 렌더링 기반의 두 가지 방법이 있습니다.

이미지 방법 : 이미지를 내부 픽셀 버퍼로 렌더링하는 방법을 찾아야합니다 (따라서 실제 UI가 팝업되지 않고 "헤드리스"테스트를 실행할 수 있습니다).

그런 다음 몇 픽셀을 선택하고 색상이 올바른지 확인하십시오. 예에서 텍스트 주위에 몇 개의 흰색 픽셀을 선택하여 렌더링이 누출되지 않도록하십시오. 도우미 방법 assertThatRectangleIs(area, color) 약간의 땅을 덮는 데 도움이 될 것입니다. 아이디어는 특정 영역 (H의 왼쪽 수직 막대와 같은)을 선택하고 너무 까다로울 수 없습니다.

렌더링 기반 방식은 GFX 라이브러리가 작동한다고 가정합니다. 그래서 당신이하는 일은 당신이 다음과 같이 실제 렌더링 코드를 조롱하는 것입니다.

public class MockGC extends GC {
    List<Op> ops = new ArrayList<Op> ();
    void drawLine (int x1, int y1, int x2, int y2) {
        ops.add(new Line(x1, y1, x2, y2, copyGC (gc)));
    }
}

따라서 비교하기 쉬운 데이터 구조에 명령과 모든 관련 옵션을 저장합니다. 또는:

public class MockGC extends GC {
    StringBuilder buffer = new StringBuilder ();

    void drawLine (int x1, int y1, int x2, int y2) {
        buffer.append("line "+x1+","+y1+" - "+x2+","+y2+", color="+foreground()+"\n");
    }
}

나중에 올바른 렌더링 명령이 발행되었고 GC (색상, 글꼴, 렌더링 힌트)가 사용되었는지 확인할 수 있습니다.

후자의 방식은 훨씬 빠르고 100% 정확하지만 코드에 훨씬 더 많은 작업이 작동합니다.

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