GUI를 단위 테스트하려면 어떻게해야합니까?
내 코드의 계산은 잘 테스트되었지만 GUI 코드가 너무 많기 때문에 전체 코드 범위가 원하는 것보다 낮습니다. 단위 테스트 GUI 코드에 대한 지침이 있습니까? 말이 되나요?
예를 들어 내 앱에 그래프가 있습니다. 그래프 테스트를 자동화하는 방법을 알 수 없었습니다. 그래프가 올바른지 확인하려면 육안 AFAIK가 필요합니다.
(저는 Java Swing을 사용하고 있습니다)
MVP 및 MVC와 같은 디자인은 일반적으로 실제 GUI에서 최대한 많은 로직을 추상화하려고합니다. 이것에 대해 매우 인기있는 기사는 Michael Feathers의 "The Humble Dialog Box" 입니다. 개인적으로 나는 UI에서 로직을 옮기려고 시도한 경험이 혼합되어 있습니다. 때로는 매우 잘 작동하고 때로는 가치보다 더 문제가 많았습니다. 그래도 내 전문 분야의 외부에 있습니다.
물론 대답은 MVC를 사용하고 최대한 많은 로직을 GUI 밖으로 옮기는 것입니다.
즉, SGI가 OpenGL을 새로운 하드웨어로 포팅 할 때 한 세트의 프리미티브를 화면에 그린 다음 프레임 버퍼의 MD5 합계를 계산하는 많은 단위 테스트가 있다고 동료들로부터 들었습니다. 그런 다음이 값을 알려진 올바른 해시 값과 비교하여 API가 픽셀 당 정확한지 신속하게 확인할 수 있습니다.
당신이 시도 할 수 UISpec4J은 스윙 기반의 자바 애플리케이션을위한 오픈 소스 기능 및 / 또는 단위 테스트 라이브러리입니다 ...
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에서 가능한 가장 많은 코드를 제거하십시오 (컨트롤러 및 모델 객체가 있음).
그래픽의 경우 그래픽을 생성하는 코드에 제공 한 값을 테스트해야합니다.
웹 기반 UI 테스트를 자동화하는 Selenium RC 가 있습니다 . 조치를 기록하고 재생합니다. 여전히 UI와의 상호 작용을 수행해야하므로 적용 범위에 도움이되지 않지만 자동화 된 빌드에 사용될 수 있습니다.
테스트는 예술적인 형태입니다. 논리를 최대한 GUI를 제거해야한다는 데 동의합니다. 그런 다음 유닛 테스트에 집중할 수 있습니다. 다른 테스트와 마찬가지로 위험을 줄이는 것이 중요합니다. 항상 모든 것을 테스트 할 필요는 없지만 많은 경우 가장 좋은 방법은 다른 영역에서 다른 테스트를 중단하는 것입니다.
다른 질문은 실제로 UI 레이어에서 테스트하려는 것입니다. UI 테스트는 일반적으로 작성, 유지 보수에 시간이 더 걸리고 취성이 가장 높기 때문에 가장 비싼 테스트입니다. 선을 그리기 전에 좌표가 올바른지 확인하기 위해 논리를 테스트하는 경우 구체적으로 무엇을 테스트하고 있습니까? 빨간색 선으로 그래프를 테스트하려면 그려집니다. 미리 설정된 좌표를 지정하고 특정 픽셀이 빨간색인지 아닌지를 테스트 할 수 있습니까? 위의 비트 맵 비교 작업에서 제안했듯이 Selenium은 GUI를 과도하게 테스트하는 것이 아니라 UI를 만드는 데 도움이되는 로직을 테스트 한 다음 UI의 어느 부분이 깨지거나 의심 스러운지 집중하고 몇 가지 테스트에 집중하는 데 중점을 둡니다 그곳에.
JFCUnit 을 사용 하여 GUI를 테스트 할 수 있지만 그래픽이 더 어려울 수 있습니다. 몇 번이나 GUI 스냅 샷을 찍어 이전 버전과 자동으로 비교했습니다. 실제 테스트를 제공하지는 않지만 자동 빌드가 예상 출력을 생성하지 못하면 경고합니다.
귀하의 질문에서 수집 한 것은 GUI 동작을 자세히 테스트하는 자동화 된 방법을 찾고 있다는 것입니다. 예를 들어 커브가 실제로 올바르게 그려 지는지 테스트하는 것입니다.
단위 테스트 프레임 워크는 자동화 된 테스트를 수행하는 방법을 제공하지만 원하는 테스트 종류는 여러 클래스의 올바른 동작을 확인하는 복잡한 통합 테스트이며, GUI 툴킷 / 라이브러리 클래스 중 테스트하고 싶지 않아야합니다.
옵션은 사용하는 플랫폼 / 툴킷 / 프레임 워크에 따라 다릅니다. 예를 들어 GUI 프레임 워크로 Qt를 사용하는 응용 프로그램은 Squish를 사용하여 테스트를 자동화 할 수 있습니다. 테스트 결과를 한 번 확인하면 자동으로 실행되는 후속 테스트 결과와 확인 된 결과를 비교합니다.
Swing & Ajax를위한 Window Licker
내가 아는 것에서 이것은 상당히 복잡하고 언어에 달려 있습니다. 많은 언어가 GUI를 테스트하는 자체 방식을 가지고 있지만 GUI를 실제로 테스트 해야하는 경우 (모델 / GUI 상호 작용이 아닌) 종종 실제 사용자 클릭 버튼을 시뮬레이션합니다. 예를 들어, Eclipse에 사용 된 SWT 프레임 워크는 SWTBot을 제공 하고 JFCUnit 은 이미 언급했으며 Mozilla는 XUL에서이를 시뮬레이션하는 고유 한 방법을 가지고 있습니다.
때로는 스크린 샷을 찍고 픽셀 완벽한 렌더링을 테스트해야합니다 (Mozilla가 올바르게 렌더링 된 페이지를 확인하기 위해이 작업을 수행한다고 생각합니다)-더 긴 설정이 필요하지만 그래프에 필요한 것일 수 있습니다. 이렇게하면 코드를 업데이트하고 테스트가 중단 될 때 이미지가 실제로 실패했는지 수동으로 확인하거나 그래프 렌더링 코드를 개선하여 더 멋진 그래프를 생성하고 스크린 샷을 업데이트해야합니다.
Swing을 사용하는 경우 FEST-Swing 은 GUI를 구동하고 어설 션을 테스트하는 데 유용합니다. "버튼 A를 클릭하면 대화 상자 B가 표시되어야합니다" 또는 "드롭 다운에서 옵션 2를 선택하면 모든 확인란의 선택이 취소 됩니다" 와 같은 것들을 테스트하는 것이 매우 간단합니다 .
언급 한 그래프 시나리오는 테스트하기 쉽지 않습니다. GUI 구성 요소를 만들고 표시하여 (FEST로 구동) GUI 구성 요소에 대한 코드 적용 범위를 얻는 것은 매우 쉽습니다. 그러나 의미있는 어설 션을 만드는 것은 어려운 부분입니다. 의미있는 어설 션이없는 코드 적용 범위는 자기기만의 운동입니다. 그래프가 거꾸로 그려 지거나 너무 작지 않은지 어떻게 테스트합니까?
자동화 된 단위 테스트로 GUI의 일부 측면을 효과적으로 테스트 할 수 없으며 다른 방법으로 테스트해야한다는 점을 받아 들여야한다고 생각합니다.
GUI 라이브러리를 테스트하는 것은 당신의 일이 아닙니다. 따라서 화면에 실제로 그려진 내용을 확인하고 대신 위젯 속성을 확인하여 그려진 내용을 정확하게 나타내는 라이브러리를 신뢰해야 할 책임을 회피 할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/215458/how-can-i-unit-test-a-gui
'programing tip' 카테고리의 다른 글
기록 데이터를 저장하는 방법 (0) | 2020.06.12 |
---|---|
iframe, 포함 및 객체 요소의 차이점 (0) | 2020.06.12 |
보유 할 수있는 JSON의 양에는 제한이 있습니까? (0) | 2020.06.12 |
기본 생성자와 소멸자에서 "= default"는 "{}"과 어떻게 다릅니 까? (0) | 2020.06.12 |
오류 발생 ( 'msg') vs 새 오류 발생 ( 'msg') (0) | 2020.06.12 |