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

앱에 대한 테스트 작성하기

이 예제에서는 앱 디자이너로 만든 앱에 대한 테스트를 작성하는 방법을 보여줍니다. 앱과 프로그래밍 방식으로 상호 작용하고 결과를 가설 검정하려면 앱 테스트 프레임워크와 단위 테스트 프레임워크를 사용하십시오.

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

app = PatientsDisplay;

이 단계는 테스트에 반드시 필요하진 않지만 앱 테스트에서 사용하는 속성을 살펴보는 것은 도움이 됩니다. 예를 들어, app.BloodPressureSwitch를 사용하여 앱 객체 내 Blood Pressure 스위치에 액세스합니다.

matlab.uitest.TestCase에서 상속되는 테스트 클래스를 생성합니다. 탭 전환 기능을 테스트하려면 테스트 메서드 test_tab을 생성하십시오. 이 테스트 메서드는 Data 탭을 선택한 다음, 선택한 탭의 제목이 정확한지 확인합니다. TestMethodSetup 메서드는 각 테스트에 맞는 앱을 만들고 테스트가 완료된 후에 삭제합니다.

classdef TestPatientsDisplay < matlab.uitest.TestCase
    properties
        App
    end
    
    methods (TestMethodSetup)
        function launchApp(testCase)
            testCase.App = PatientsDisplay;
            testCase.addTeardown(@delete,testCase.App);
        end
    end
    
    methods (Test)
        function test_tab(testCase)     
            % Choose Data Tab
            dataTab = testCase.App.Tab2;
            testCase.choose(dataTab)
            
            % Verify Data Tab is selected
            testCase.verifyEqual(testCase.App.TabGroup.SelectedTab.Title,'Data')
        end
        
    end
end

다양한 플로팅 옵션을 테스트하는 test_plottingOptions 메서드를 생성합니다. 이 테스트 메서드는 Histogram 라디오 버튼을 누르고 x 레이블이 변경되었는지 확인합니다. 그런 다음, Bin Width 슬라이더를 변경하고 Bin 개수를 확인합니다.

classdef TestPatientsDisplay < matlab.uitest.TestCase
    properties
        App
    end
    
    methods (TestMethodSetup)
        function launchApp(testCase)
            testCase.App = PatientsDisplay;
            testCase.addTeardown(@delete,testCase.App);
        end
    end
    
    methods (Test)
        function test_plottingOptions(testCase)
            % Press the histogram radio button
            testCase.press(testCase.App.HistogramButton)
            
            % Verify xlabel updated from 'Weight' to 'Systolic'
            testCase.verifyEqual(testCase.App.UIAxes.XLabel.String,'Systolic')
            
            % Change the Bin Width to 9
            testCase.choose(testCase.App.BinWidthSlider,9)
            
            % Verify the number of bins is now 4
            testCase.verifyEqual(testCase.App.UIAxes.Children.NumBins,4)
        end
        
        function test_tab(testCase) ...    
        
    end
end

혈압 데이터 및 표시를 테스트하는 test_bloodPressure 메서드를 생성합니다. 이 테스트 메서드는 y축 레이블과 산점 값을 확인합니다. 그런 다음, Diastolic 측정값으로 변경한 후 레이블과 데이터를 다시 확인합니다.

classdef TestPatientsDisplay < matlab.uitest.TestCase
    properties
        App
    end
    
    methods (TestMethodSetup)
        function launchApp(testCase)
            testCase.App = PatientsDisplay;
            testCase.addTeardown(@delete,testCase.App);
        end
    end
    
    methods (Test)
        function test_bloodPressure(testCase)
            % Extract blood pressure data from app
            t = cell2table(testCase.App.Tab2.Children.Data);
            t.Var2 = categorical(t.Var2);
            allMales = t(t.Var2=='Male',:);
            maleDiastolicData = allMales.Var7';
            maleSystolicData = allMales.Var8';
            
            % Verify ylabel and that male Systolic data shows
            ax = testCase.App.UIAxes;
            testCase.verifyEqual(ax.YLabel.String,'Systolic')
            testCase.verifyEqual(ax.Children.YData,maleSystolicData)
            
            % Switch to 'Diastolic' reading
            testCase.choose(testCase.App.BloodPressureSwitch,'Diastolic')
            
            % Verify ylabel changed and male Diastolic data shows
            testCase.verifyEqual(ax.YLabel.String,'Diastolic')
            testCase.verifyEqual(ax.Children.YData,maleDiastolicData);
        end

        function test_plottingOptions(testCase) ...
        
        function test_tab(testCase) ...     
        
    end
end

성별 데이터 및 표시를 테스트하는 test_gender 메서드를 생성합니다. 이 테스트 메서드는 남성의 산점 개수를 확인한 다음, 여성 데이터를 포함하도록 체크박스를 누릅니다. 그리고 두 데이터 세트가 플로팅되었는지와 여성 데이터의 색상이 빨간색인지 확인합니다. 마지막으로 남성 데이터 체크박스의 선택을 취소하고 플로팅된 데이터 세트와 산점의 개수를 확인합니다. 여성 산점 개수가 50개가 아니라 53개이기 때문에 이 테스트는 실패했습니다. 테스트가 실패한 경우 스크린샷을 캡처하려면 onFailure 메서드에 ScreenshotDiagnostic을 사용하십시오.

classdef TestPatientsDisplay < matlab.uitest.TestCase
    properties
        App
    end
    
    methods (TestMethodSetup)
        function launchApp(testCase)
            testCase.App = PatientsDisplay;
            testCase.addTeardown(@delete,testCase.App);
        end
    end
    
    methods (Test)
        function test_gender(testCase)
            import matlab.unittest.diagnostics.ScreenshotDiagnostic
            testCase.onFailure(ScreenshotDiagnostic);
            
            % Verify 47 male scatter points
            ax = testCase.App.UIAxes;
            testCase.verifyNumElements(ax.Children.XData,47);
            
            % Enable the checkbox for female data
            testCase.choose(testCase.App.FemaleCheckBox);
            
            % Verify two data sets display and the female data is red
            testCase.assertNumElements(ax.Children,2);
            testCase.verifyEqual(ax.Children(1).CData,[1 0 0]);
            
            % Disable the male data
            testCase.choose(testCase.App.MaleCheckBox,false);
            
            % Verify one data set displays and number of scatter points
            testCase.verifyNumElements(ax.Children,1);
            testCase.verifyNumElements(ax.Children.XData,50);
        end
        
        function test_bloodPressure(testCase)
            % Extract blood pressure data from app
            t = cell2table(testCase.App.Tab2.Children.Data);
            t.Var2 = categorical(t.Var2);
            allMales = t(t.Var2=='Male',:);
            maleDiastolicData = allMales.Var7';
            maleSystolicData = allMales.Var8';
            
            % Verify ylabel and that male Systolic data shows
            ax = testCase.App.UIAxes;
            testCase.verifyEqual(ax.YLabel.String,'Systolic')
            testCase.verifyEqual(ax.Children.YData,maleSystolicData)
            
            % Switch to 'Diastolic' reading
            testCase.choose(testCase.App.BloodPressureSwitch,'Diastolic')
            
            % Verify ylabel changed and male Diastolic data shows
            testCase.verifyEqual(ax.YLabel.String,'Diastolic')
            testCase.verifyEqual(ax.Children.YData,maleDiastolicData);
        end

        function test_plottingOptions(testCase)
            % Press the histogram radio button
            testCase.press(testCase.App.HistogramButton)
            
            % Verify xlabel updated from 'Weight' to 'Systolic'
            testCase.verifyEqual(testCase.App.UIAxes.XLabel.String,'Systolic')
            
            % Change the Bin Width to 9
            testCase.choose(testCase.App.BinWidthSlider,9)
            
            % Verify the number of bins is now 4
            testCase.verifyEqual(testCase.App.UIAxes.Children.NumBins,4)
        end
        
        function test_tab(testCase)     
            % Choose Data Tab
            dataTab = testCase.App.Tab2;
            testCase.choose(dataTab)
            
            % Verify Data Tab is selected
            testCase.verifyEqual(testCase.App.TabGroup.SelectedTab.Title,'Data')
        end
        
    end
end

테스트를 실행하십시오.

results = runtests('TestPatientsDisplay');
Running TestPatientsDisplay

================================================================================
Verification failed in TestPatientsDisplay/test_gender.

    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyNumElements failed.
    --> The value did not have the correct number of elements.
        
        Actual Number of Elements:
            53
        Expected Number of Elements:
            50
    
    Actual Value:
      Columns 1 through 49
    
       131   133   119   142   142   132   128   137   129   131   133   117   137   146   123   143   114   126   137   138   137   118   128   135   121   136   135   147   124   134   130   130   127   141   111   134   137   136   130   137   127   127   115   131   126   120   132   120   123
    
      Columns 50 through 53
    
       141   129   124   134

    ----------------------
    Additional Diagnostic:
    ----------------------
    Screenshot captured to:
    --> C:\Temp\54fd8dc0-0637-4926-9c4f-f217fe195fe1\Screenshot_daba8870-adb3-4a1c-ba11-df3d9b51d36f.png

    ------------------
    Stack Information:
    ------------------
    In C:\Work\TestPatientsDisplay.m (TestPatientsDisplay.test_gender) at 34
================================================================================
....
Done TestPatientsDisplay
__________

Failure Summary:

     Name                             Failed  Incomplete  Reason(s)
    ==============================================================================
     TestPatientsDisplay/test_gender    X                 Failed by verification.

참고 항목

관련 항목