为 App 编写测试
此示例说明如何在您当前文件夹中为通过 App 设计工具创建的 App 编写测试。要以编程方式与 App 交互并验证结果,请使用 App 测试框架和单元测试框架。
要在测试之前了解该 App 的属性,请创建该 App 的实例。此步骤对于测试不是必需的,但是了解测试使用的属性会很有帮助。例如,使用 app.BloodPressureSwitch 访问 App 对象内的血压开关。
app = PatientsDisplay;

在当前文件夹中名为 PatientsDisplayTest.m 的文件中,创建一个从 matlab.uitest.TestCase 派生的测试类。要为每个测试创建一个 App 并在测试后删除它,请向该类添加一个 TestMethodSetup 方法。然后,向该类添加四个 Test 方法:
testTab方法 - 测试选项卡切换功能。选择数据选项卡,然后验证所选选项卡是否具有预期的标题。testPlottingOptions方法 - 测试各种绘图选项。首先,按下直方图单选按钮,并确认 x 轴标签会发生更改。然后,更改 bin 宽度滑块,并验证 bin 的数量。testBloodPressure方法 - 测试血压数据并显示。首先,从 App 中提取血压数据,并验证 y 轴标签和散点的值。然后,切换到Diastolic读数,并再次验证标签和显示的值。testGender方法 - 测试性别数据并显示。首先,验证男性数据的散点数量。然后,包含有关女性的数据,并验证绘制了两个数据集,而且有关女性的数据的散点颜色为红色。最后,排除关于男性的数据,并测试绘制的数据集和散点的数量。
classdef PatientsDisplayTest < matlab.uitest.TestCase properties App end methods (TestMethodSetup) function launchApp(testCase) testCase.App = PatientsDisplay; testCase.addTeardown(@delete,testCase.App) end end methods (Test) function testTab(testCase) % Choose the Data tab dataTab = testCase.App.DataTab; testCase.choose(dataTab) % Verify that the tab has the expected title testCase.verifyEqual( ... testCase.App.TabGroup.SelectedTab.Title,'Data') end function testPlottingOptions(testCase) % Press the Histogram radio button testCase.press(testCase.App.HistogramButton) % Verify that the x-axis label changed 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 testCase.verifyEqual(testCase.App.UIAxes.Children.NumBins,4) end function testBloodPressure(testCase) % Extract the blood pressure data from the app t = testCase.App.DataTab.Children.Data; t.Gender = categorical(t.Gender); allMales = t(t.Gender == "Male",:); maleDiastolicData = allMales.Diastolic'; maleSystolicData = allMales.Systolic'; % Verify the y-axis label and that the male Systolic data is % displayed ax = testCase.App.UIAxes; testCase.verifyEqual(ax.YLabel.String,'Systolic') testCase.verifyEqual(ax.Children.YData,maleSystolicData) % Switch to Diastolic readings testCase.choose(testCase.App.BloodPressureSwitch,'Diastolic') % Verify the y-axis label and that the male Diastolic data % is displayed testCase.verifyEqual(ax.YLabel.String,'Diastolic') testCase.verifyEqual(ax.Children.YData,maleDiastolicData) end function testGender(testCase) % Take a screenshot if the test fails import matlab.unittest.diagnostics.ScreenshotDiagnostic testCase.onFailure(ScreenshotDiagnostic) % Verify the number of male scatter points ax = testCase.App.UIAxes; testCase.verifyNumElements(ax.Children.XData,47) % Include the female data testCase.choose(testCase.App.FemaleCheckBox) % Verify the number of displayed data sets and the color % representing the female data testCase.assertNumElements(ax.Children,2) testCase.verifyEqual(ax.Children(1).CData,[1 0 0]) % Exclude the male data testCase.choose(testCase.App.MaleCheckBox,false) % Verify the number of displayed data sets and the number of % scatter points testCase.verifyNumElements(ax.Children,1) testCase.verifyNumElements(ax.Children.XData,50) end end end
运行测试。在此示例中,三个测试通过,一个测试失败。
results = runtests("PatientsDisplayTest");
Running PatientsDisplayTest
...
================================================================================
Verification failed in PatientsDisplayTest/testGender.
---------------------
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 13
131 133 119 142 142 132 128 137 129 131 133 117 137
Columns 14 through 26
146 123 143 114 126 137 138 137 118 128 135 121 136
Columns 27 through 39
135 147 124 134 130 130 127 141 111 134 137 136 130
Columns 40 through 52
137 127 127 115 131 126 120 132 120 123 141 129 124
Column 53
134
----------------------
Additional Diagnostic:
----------------------
Screenshot captured to:
--> C:\Temp\b5238869-2e26-4f74-838f-83b1929c4eb1\Screenshot_ad84e34f-7587-41ca-8a97-25c484bbcd70.png
------------------
Stack Information:
------------------
In C:\work\PatientsDisplayTest.m (PatientsDisplayTest.testGender) at 85
================================================================================
.
Done PatientsDisplayTest
__________
Failure Summary:
Name Failed Incomplete Reason(s)
=============================================================================
PatientsDisplayTest/testGender X Failed by verification.
另请参阅
matlab.uitest.TestCase | matlab.unittest.diagnostics.ScreenshotDiagnostic