앱 테스트 프레임워크 개요
MATLAB® 앱 테스트 프레임워크를 사용하여 앱 디자이너로 만든 앱 또는 uifigure 함수를 통해 프로그래밍 방식으로 빌드된 앱을 테스트합니다. 앱 테스트 프레임워크에서는 UI 컴포넌트에 대한 제스처(예: 버튼 누르기 또는 슬라이더 끌기)를 프로그래밍 방식으로 수행하고 앱 동작을 확인하는 테스트 클래스를 작성할 수 있습니다.
앱 테스트
테스트 생성 – 클래스 기반 테스트에서 matlab.uitest.TestCase를 서브클래스화하여 앱 테스트 프레임워크를 사용할 수 있습니다. matlab.uitest.TestCase는 matlab.unittest.TestCase의 서브클래스이기 때문에 테스트는 가설 검정(Qualification), 픽스처, 플러그인 같은 단위 테스트 프레임워크 기능에 액세스할 수 있습니다. 명령 프롬프트에서 앱 테스트 프레임워크를 시험하려면 matlab.uitest.TestCase.forInteractiveUse를 사용하여 테스트 케이스 인스턴스를 생성하십시오.
테스트 콘텐츠 – 통상적으로 앱의 테스트는 matlab.uitest.TestCase의 제스처 메서드(예: press 또는 type)를 사용하여 프로그래밍 방식으로 앱 컴포넌트와 상호 작용하고, 그 결과에 대해 가설 검정(Qualification)을 수행합니다. 예를 들어, 테스트는 한 체크박스를 누른 후 다른 체크박스가 비활성화되는지를 확인할 수 있습니다. 또는 텍스트 상자에 숫자를 입력한 후 앱이 예상된 결과를 계산하는지 확인할 수 있습니다. 이러한 유형의 테스트를 하려면 테스트 중인 앱의 속성을 이해해야 합니다. 버튼 누름을 확인하려면 MATLAB이 앱 객체 내에서 버튼 상태를 저장하는 위치를 알아야 합니다. 계산 결과를 확인하려면 앱 내에서 결과에 액세스하는 방법을 알아야 합니다.
테스트 정리 – 테스트 후 앱을 삭제하는 해제 동작을 포함하는 것이 좋습니다. 통상적으로 테스트 메서드에서는 matlab.unittest.TestCase의 addTeardown 메서드를 사용하여 이 동작을 추가합니다.
앱 잠금 – 앱 테스트에서 Figure를 만들면 프레임워크는 컴포넌트와 외부 상호 작용을 하지 못하도록 즉시 Figure를 잠급니다. 명령 프롬프트에서 시험용으로 matlab.uitest.TestCase.forInteractiveUse의 인스턴스를 만든 경우에는 앱 테스트 프레임워크에서 UI 컴포넌트를 잠그지 않습니다.
디버그 용도로 Figure 잠금을 해제하려면 matlab.uitest.unlock 함수를 사용하십시오.
대화 상자 상호 작용 – 일부 앱은 모달 대화 상자를 표시하면서 다른 앱 컴포넌트와의 상호 작용을 막습니다. 모달 대화 상자 뒤에 있는 Figure에 액세스하려면, 사용자가 먼저 그 대화 상자에서 옵션을 선택하거나 대화 상자를 닫아야 합니다. Figure 창에서 프로그래밍 방식으로 대화 상자와 상호 작용하려면 chooseDialog 또는 dismissDialog 메서드를 사용하십시오.
UI 컴포넌트의 제스처 지원
matlab.uitest.TestCase의 제스처 메서드는 다양한 UI 컴포넌트를 지원합니다.
| 컴포넌트 | 일반적인 생성 함수 | matlab.uitest.TestCase 제스처 메서드 | ||||||
press | choose | drag | scroll | type | hover | chooseContextMenu | ||
| 좌표축 | axes | ✔ | ✔ | ✔ | ✔ | ✔ | ||
| 버튼 | uibutton | ✔ | ✔ | |||||
| 버튼 그룹 | uibuttongroup | ✔ | ||||||
| 체크박스 | uicheckbox | ✔ | ✔ | ✔ | ||||
| 날짜 선택기 | uidatepicker | ✔ | ✔ | |||||
| 불연속 노브 | uiknob | ✔ | ✔ | |||||
| 드롭다운 | uidropdown | ✔ | ✔ | ✔ | ||||
| 편집 필드(숫자, 텍스트) | uieditfield | ✔ | ✔ | |||||
| 하이퍼링크 | uihyperlink | ✔ | ✔ | |||||
| 이미지 | uiimage | ✔ | ✔ | |||||
| 노브 | uiknob | ✔ | ✔ | ✔ | ||||
| 레이블 | uilabel | ✔ | ||||||
| 목록 상자 | uilistbox | ✔ | ✔ | |||||
| 메뉴 | uimenu | ✔ | ||||||
| 패널 | uipanel | ✔ | ✔ | ✔ | ||||
| 극좌표 좌표축 | polaraxes | ✔ | ✔ | ✔ | ||||
| 푸시 툴 | uipushtool | ✔ | ||||||
| 라디오 버튼 | uiradiobutton | ✔ | ✔ | ✔ | ||||
| 슬라이더 | uislider | ✔ | ✔ | ✔ | ||||
| 스핀 상자 | uispinner | ✔ | ✔ | ✔ | ||||
| 상태 버튼 | uibutton | ✔ | ✔ | ✔ | ||||
| 스위치(로커, 슬라이더, 토글) | uiswitch | ✔ | ✔ | ✔ | ||||
| 탭 | uitab | ✔ | ||||||
| 탭 그룹 | uitabgroup | ✔ | ||||||
| 테이블 | uitable | ✔ | ✔ | ✔ | ||||
| 텍스트 영역 | uitextarea | ✔ | ✔ | |||||
| 토글 버튼 | uitogglebutton | ✔ | ✔ | ✔ | ||||
| 토글 툴 | uitoggletool | ✔ | ✔ | |||||
| 트리 노드 | uitreenode | ✔ | ✔ | |||||
| UI 좌표축 | uiaxes | ✔ | ✔ | ✔ | ✔ | ✔ | ||
| UI Figure | uifigure | ✔ | ✔ | ✔ | ✔ | |||
예제: 앱에 대한 테스트 작성하기
이 예제에서는 현재 폴더에 있는 앱에 대한 테스트의 작성 방법을 보여줍니다. 이 앱은 플롯의 샘플 크기와 컬러맵을 변경할 수 있는 옵션을 제공합니다. 앱과 프로그래밍 방식으로 상호 작용하고 결과를 가설 검정하려면 앱 테스트 프레임워크와 단위 테스트 프레임워크를 사용하십시오.
테스트 전에 앱의 속성을 살펴보려면 앱의 인스턴스를 생성하십시오. 이 단계는 테스트에 반드시 필요하진 않지만 테스트에서 사용하는 속성을 살펴보는 것은 도움이 됩니다. 예를 들어, app.UpdatePlotButton을 사용하여 앱 내 Update Plot 버튼에 액세스할 수 있습니다.
app = ConfigurePlotAppExample;
![{"String":"Figure Configure Plot contains an axes object and other objects of type uilabel, uidropdown, uibutton, uinumericeditfield. The axes object contains an object of type surface.","Tex":[],"LaTex":[]}](../../examples/matlab/win64/WriteATestForAnAppExample_01.png)
현재 폴더에 있는 ConfigurePlotAppExampleTest.m이라는 파일에서 matlab.uitest.TestCase에서 파생된 테스트 클래스를 만듭니다. 두 개의 Test 메서드를 ConfigurePlotAppExampleTest 클래스에 추가합니다. 각 메서드에서, 테스트하기 전에 앱의 인스턴스를 만들고 테스트가 완료되면 이를 삭제합니다.
testSampleSize메서드 — 샘플 크기를 수정하고, 플롯을 업데이트하며, 플롯에서 지정된 샘플 크기를 사용하는지 확인합니다.testColormap메서드 — 컬러맵을 선택하고, 플롯을 업데이트하며, 플롯에서 지정된 컬러맵을 사용하는지 확인합니다.
classdef ConfigurePlotAppExampleTest < matlab.uitest.TestCase methods (Test) function testSampleSize(testCase) app = ConfigurePlotAppExample; testCase.addTeardown(@delete,app) testCase.type(app.SampleSizeEditField,12) testCase.press(app.UpdatePlotButton) ax = app.UIAxes; surfaceObj = ax.Children; testCase.verifySize(surfaceObj.ZData,[12 12]) end function testColormap(testCase) app = ConfigurePlotAppExample; testCase.addTeardown(@delete,app) testCase.choose(app.ColormapDropDown,"Winter") testCase.press(app.UpdatePlotButton) expectedMap = winter; ax = app.UIAxes; testCase.verifyEqual(ax.Colormap,expectedMap) end end end
테스트를 실행하십시오. 이 예제에서는 두 테스트가 모두 통과했습니다.
results = runtests("ConfigurePlotAppExampleTest")Running ConfigurePlotAppExampleTest
.
. Done ConfigurePlotAppExampleTest __________
results =
1×2 TestResult array with properties:
Name
Passed
Failed
Incomplete
Duration
Details
Totals:
2 Passed, 0 Failed, 0 Incomplete.
11.9555 seconds testing time.