[unit-testing] GUI를 단위 테스트하려면 어떻게해야합니까?

내 코드의 계산은 잘 테스트되었지만 GUI 코드가 너무 많기 때문에 전체 코드 범위가 원하는 것보다 낮습니다. 단위 테스트 GUI 코드에 대한 지침이 있습니까? 말이 되나요?

예를 들어 내 앱에 그래프가 있습니다. 그래프 테스트를 자동화하는 방법을 알 수 없었습니다. 그래프가 올바른지 확인하려면 육안 AFAIK가 필요합니다.

(저는 Java Swing을 사용하고 있습니다)



답변

MVP 및 MVC와 같은 디자인은 일반적으로 실제 GUI에서 최대한 많은 로직을 추상화하려고합니다. 이것에 대해 매우 인기있는 기사는 Michael Feathers의 “The Humble Dialog Box” 입니다. 개인적으로 나는 UI에서 로직을 옮기려고 시도한 경험이 혼합되어 있습니다. 때로는 매우 잘 작동하고 때로는 가치보다 더 문제가 많았습니다. 그래도 내 전문 분야의 외부에 있습니다.


답변

물론 대답은 MVC를 사용하고 최대한 많은 로직을 GUI 밖으로 옮기는 것입니다.

즉, SGI가 OpenGL을 새로운 하드웨어로 포팅 할 때 한 세트의 프리미티브를 화면에 그린 다음 프레임 버퍼의 MD5 합계를 계산하는 많은 단위 테스트가 있다고 동료들로부터 들었습니다. 그런 다음이 값을 알려진 올바른 해시 값과 비교하여 API가 픽셀 당 정확한지 신속하게 확인할 수 있습니다.


답변

당신이 시도 할 수 UISpec4J은 스윙 기반의 자바 애플리케이션을위한 오픈 소스 기능 및 / 또는 단위 테스트 라이브러리입니다 …


답변

웹 기반 UI 테스트를 자동화하는 Selenium RC 가 있습니다 . 조치를 기록하고 재생합니다. 여전히 UI와의 상호 작용을 수행해야하므로 적용 범위에 도움이되지 않지만 자동화 된 빌드에 사용될 수 있습니다.


답변

Swing GUI 어플리케이션 을 위해 오이Swinger 를 사용하여 기능적 승인 테스트를 일반 영어로 작성할 수 있습니다. Swinger는 Netbeans의 Jemmy 라이브러리를 사용하여 앱을 구동합니다.

오이를 사용하면 다음과 같은 테스트를 작성할 수 있습니다.

 Scenario: Dialog manipulation
    Given the frame "SwingSet" is visible
    When I click the menu "File/About"
    Then I should see the dialog "About Swing!"
    When I click the button "OK"
    Then I should not see the dialog "About Swing!"

Swinger 비디오 데모 를보고 실제로 작동하는지 확인하십시오.


답변

다음은 몇 가지 팁입니다.

GUI없이 컨트롤러를 테스트하고 코드를 테스트 할 수있는 방법으로 GUI (컨트롤러 및 모델 객체가 있음)에서 최대한 많은 코드를 제거하십시오.

그래픽의 경우 그래픽을 생성하는 코드에 제공 한 값을 테스트해야합니다.


답변

테스트는 예술적인 형태입니다. 논리를 최대한 GUI를 제거해야한다는 데 동의합니다. 그런 다음 유닛 테스트에 집중할 수 있습니다. 다른 테스트와 마찬가지로 위험을 줄이는 것이 중요합니다. 항상 모든 것을 테스트 할 필요는 없지만 많은 경우 가장 좋은 방법은 다른 영역에서 다른 테스트를 중단하는 것입니다.

다른 질문은 실제로 UI 레이어에서 테스트하려는 것입니다. UI 테스트는 일반적으로 작성, 유지 보수에 시간이 더 걸리고 취성이 가장 높기 때문에 가장 비싼 테스트입니다. 선을 그리기 전에 좌표가 올바른지 논리를 테스트하면 구체적으로 무엇을 테스트하고 있습니까? 빨간색 선으로 그래프를 테스트하려면 그려집니다. 미리 설정된 좌표를 지정하고 특정 픽셀이 빨간색인지 빨간색인지 테스트 할 수 있습니까? 위의 비트 맵 비교 작업에서 제안했듯이 Selenium은 GUI를 과도하게 테스트하는 것이 아니라 UI를 만드는 데 도움이되는 로직을 테스트 한 다음 UI의 어느 부분이 깨지거나 의심 스러운지 집중하고 몇 가지 테스트에 중점을 둡니다. 그곳에.