В этом примере показано, как к тестам записи на приложение App Designer. Чтобы взаимодействовать с приложением программно и квалифицировать результаты, используйте среду тестирования приложения и среду модульного тестирования.
В командной строке сделайте приложение доступным путем добавления папки, которая включает приложение в MATLAB® путь поиска файлов.
addpath(fullfile(matlabroot,'examples','matlab','main'))
Чтобы исследовать свойства этого приложения до тестирования, создайте экземпляр приложения в командной строке.
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.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.