Написание теста для приложения

В этом примере показано, как записать тесты для приложения App Designer. Чтобы программно взаимодействовать с приложением и оценивать результаты, используйте среду тестирования приложений и среду модульного тестирования.

В командной строке сделайте приложение доступным, добавив папку, которая включает приложение в MATLAB® путь поиска файлов.

addpath(fullfile(matlabroot,'examples','matlab','main'))

Чтобы исследовать свойства этого приложения перед проверкой, создайте образец приложения в командной строке.

app = PatientsDisplay;

Этот шаг не нужен для тестов, но полезно исследовать свойства, используемые тестами приложения. Для примера используйте app.BloodPressureSwitch для доступа к Blood Pressure коммутатору в объекте приложения.

Создайте тестовый класс, который наследует от matlab.uitest.TestCase. Чтобы протестировать функциональность переключения вкладок, создайте метод тестирования test_tab. Метод тестирования выбирает вкладку Data, а затем проверяет, что выбранная вкладка имеет правильный заголовок. The 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.DataTab;
            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 и проверяет количество интервалов.

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 = testCase.App.DataTab.Children.Data;
            t.Gender = categorical(t.Gender);
            allMales = t(t.Gender == 'Male',:);
            maleDiastolicData = allMales.Diastolic';
            maleSystolicData = allMales.Systolic';
            
            % 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 метод, который проверяет гендерные данные и отображает. Метод тестирования проверяет количество мужских точек рассеяния, а затем устанавливает флажок, чтобы включить данные о самце. Он проверяет, что два набора данных нанесены на график, и цвет женских данных является красным. Наконец, он снимает флажок «Мужские данные» и проверяет количество нанесенных на график наборов данных и точек рассеяния. Этот тест не пройден, потому что существует 53 женские точки рассеяния вместо 50. Чтобы сделать скриншот, когда тест не проходит, используйте ScreenshotDiagnostic с onFailure способ.

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 = testCase.App.DataTab.Children.Data;
            t.Gender = categorical(t.Gender);
            allMales = t(t.Gender == 'Male',:);
            maleDiastolicData = allMales.Diastolic';
            maleSystolicData = allMales.Systolic';
            
            % 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.DataTab;
            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\83292efd-b703-46ef-8c41-00e20167321d\Screenshot_c025020f-281e-483c-8ca8-f1c857421fde.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.

См. также

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте