이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

앱 테스트 프레임워크 개요

MATLAB® 앱 테스트 프레임워크를 사용하여 앱 디자이너로 만든 앱 또는 uifigure 함수를 통해 프로그래밍 방식으로 빌드된 앱을 테스트합니다. 앱 테스트 프레임워크에서는 UI 구성요소에 대한 제스처(예: 버튼 누르기 또는 슬라이더 끌기)를 프로그래밍 방식으로 수행하고 앱 동작을 확인하는 테스트 클래스를 작성할 수 있습니다.

앱 테스트

테스트 생성 – 클래스 기반 테스트에서 matlab.uitest.TestCase를 서브클래스화하여 앱 테스트 프레임워크를 사용할 수 있습니다. matlab.uitest.TestCasematlab.unittest.TestCase의 서브클래스이기 때문에, 테스트는 가설 검정(Qualification), 픽스처, 플러그인 같은 단위 테스트 프레임워크 기능에 액세스할 수 있습니다. 명령 프롬프트에서 앱 테스트 프레임워크를 시험하려면 matlab.uitest.TestCase.forInteractiveUse를 사용하여 테스트 케이스 인스턴스를 생성하십시오.

테스트 콘텐츠 – 통상적으로 앱의 테스트는 matlab.uitest.TestCase의 제스처 메서드(예: press 또는 drag)를 사용하여 프로그래밍 방식으로 앱 구성요소와 상호 작용하고, 그 결과에 대해 가설 검정(Qualification)을 수행합니다. 예를 들어, 테스트는 한 체크박스를 누른 후 다른 체크박스가 비활성화되는지를 확인할 수 있습니다. 또는 텍스트 상자에 숫자를 입력한 후 앱이 결과를 정확하게 계산하는지 확인할 수 있습니다. 이러한 유형의 테스트를 하려면 테스트 중인 앱의 속성을 이해해야 합니다. 버튼 누름을 확인하려면 MATLAB이 앱 객체 내에서 버튼 상태를 저장하는 위치를 알아야 합니다. 계산 결과를 확인하려면 앱 내에서 결과에 액세스하는 방법을 알아야 합니다.

테스트 정리 – 테스트 후 앱을 삭제하는 해제 동작을 포함시키는 것이 좋습니다. 통상적으로 테스트 메서드에서는 matlab.unittest.TestCaseaddTeardown 메서드를 사용하여 이 동작을 추가합니다.

앱 잠금 – 앱 테스트에서 Figure를 만들면 프레임워크는 구성요소와 외부 상호 작용을 하지 못하도록 즉시 Figure를 잠급니다. 명령 프롬프트에서 시험용으로 matlab.uitest.TestCase.forInteractiveUse의 인스턴스를 만든 경우에는 앱 테스트 프레임워크에서 UI 구성요소를 잠그지 않습니다.

디버그 용도로 Figure 잠금을 해제하려면 matlab.uitest.unlock 함수를 사용하십시오.

UI 구성요소의 제스처 지원

matlab.uitest.TestCase의 제스처 메서드는 다양한 UI 구성요소를 지원합니다.

구성요소matlab.uitest.TestCase 제스처 메서드
presschoosedragtypehover
버튼    
상태 버튼   
체크박스   
스위치   
불연속 노브    
노브   
드롭다운   
편집 필드    
텍스트 영역    
스핀 상자   
슬라이더   
목록 상자    
버튼 그룹    
탭 그룹    
    
트리 노드    
메뉴    
날짜 선택기    
좌표축   
UI 좌표축   
UI Figure   

앱에 대한 테스트 작성하기

이 예제에서는 플롯의 샘플 크기와 컬러맵을 변경할 수 있는 옵션을 제공하는 앱에 대한 테스트의 작성 방법을 보여줍니다. 앱과 프로그래밍 방식으로 상호 작용하고 결과를 가설 검정하려면 단위 테스트 프레임워크와 결합된 앱 테스트 프레임워크를 사용하십시오.

테스트 전에 이 앱의 속성을 살펴보려면 명령 프롬프트에서 앱의 인스턴스를 생성하십시오.

app = ConfigurePlotAppExample;

이 단계는 테스트에 반드시 필요하진 않지만 앱 테스트에서 사용하는 속성을 살펴보는 것은 도움이 됩니다. 예를 들어, app.UpdatePlotButton을 사용하여 앱 객체 내 Update Plot 버튼에 액세스할 수 있습니다.

matlab.uitest.TestCase에서 상속되는 테스트 클래스를 생성합니다.

classdef testConfigurePlotAppExample < matlab.uitest.TestCase
    
    methods (Test)

    end
    
end

테스트 메서드 test_SampleSize를 생성하여 샘플 크기를 테스트합니다. 이 테스트 메서드는 샘플 크기를 수정하고, 플롯을 업데이트하며, 곡면에서 지정된 샘플 크기를 사용하는지 확인합니다. addTeardown을 호출하면 테스트가 완료된 후 앱이 삭제됩니다.

classdef testConfigurePlotAppExample < matlab.uitest.TestCase
    
    methods (Test)
        function test_SampleSize(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
    end
    
end

두 번째 테스트 메서드 test_Colormap을 생성하여 컬러맵을 테스트합니다. 이 테스트 메서드는 컬러맵을 선택하고, 플롯을 업데이트하며, 플롯에서 지정된 컬러맵을 사용하는지 확인합니다. 전체 코드는 다음과 같습니다.

classdef testConfigurePlotAppExample < matlab.uitest.TestCase
    
    methods (Test)
        function test_SampleSize(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 test_Colormap(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('testConfigurePlotAppExample')
Running testConfigurePlotAppExample
..
Done testConfigurePlotAppExample
__________


results = 

  1×2 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   2 Passed, 0 Failed, 0 Incomplete.
   4.7551 seconds testing time.

참고 항목

관련 항목