앱 테스트 프레임워크 개요
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 창의 알림 대화 상자를 닫으려면 dismissAlertDialog
메서드를 사용하십시오.
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;
현재 폴더에 있는 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.