В этом примере показано, как писать тесты для приложения App Designer. Чтобы взаимодействовать с приложением программно и оценивать результаты, используйте структуру тестирования приложений и структуру модульного тестирования.
В командной строке сделайте приложение доступным, добавив папку, содержащую приложение, в путь поиска MATLAB ®.
addpath(fullfile(matlabroot,'examples','matlab','main'))
Чтобы просмотреть свойства этого приложения перед тестированием, создайте экземпляр приложения в командной строке.
app = PatientsDisplay;
Этот шаг не является необходимым для тестов, но полезно изучить свойства, используемые тестами приложения. Например, использовать app.BloodPressureSwitch для доступа к переключателю артериального давления в объекте приложения.
Создать тестовый класс, который наследует от 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.DataTab; testCase.choose(dataTab) % Verify Data Tab is selected testCase.verifyEqual(testCase.App.TabGroup.SelectedTab.Title,'Data') end end end
Создать test_plottingOptions метод, который проверяет различные параметры печати. Метод тестирования нажимает на переключатель Histogram и проверяет, изменилась ли метка X. Затем он изменяет ползунок «Ширина ячейки» и проверяет количество ячеек.
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.