您可以将变量输入插入到基于类的现有测试中。要提供在测试文件外定义且需要由测试迭代使用(通过参数化测试)的测试数据,请创建一个由
Parameter
实例组成的数组,然后结合
ExternalParameters
名称-值参数使用
TestSuite
创建方法,例如
fromClass
。
创建
cleanData
函数。该函数接受数组,对数组进行向量化,删除
0
、
NaN
和
Inf
,然后对数组进行排序。
function Y = cleanData(X)
Y = X(:); % Vectorize array
Y = rmmissing(Y); % Remove NaN
% Remove 0 and Inf
idx = (Y==0 | Y==Inf);
Y = Y(~idx);
% If array is empty, set to eps
if isempty(Y)
Y = eps;
Y = sort(Y); % Sort vector
创建一个参数化测试来测试
cleanData
函数。该测试对
properties
块中定义的两个数据集重复使用四个
Test
方法。
classdef TestClean < matlab.unittest.TestCase
properties (TestParameter)
Data = struct("clean",[5 3 9;1 42 5;32 5 2], ...
"needsCleaning",[1 13;NaN 0;Inf 42]);
methods (Test)
function classCheck(testCase,Data)
act = cleanData(Data);
testCase.assertClass(act,"double")
function sortCheck(testCase,Data)
act = cleanData(Data);
testCase.verifyTrue(issorted(act))
function finiteCheck(testCase,Data)
import matlab.unittest.constraints.IsFinite
act = cleanData(Data);
testCase.verifyThat(act,IsFinite)
function noZeroCheck(testCase,Data)
import matlab.unittest.constraints.EveryElementOf
import matlab.unittest.constraints.IsEqualTo
act = cleanData(Data);
testCase.verifyThat(EveryElementOf(act),~IsEqualTo(0))
运行测试。该框架使用测试文件中定义的数据运行八个参数化测试。
Running TestClean
........
Done TestClean
__________
ans =
8×6 table
Name Passed Failed Incomplete Duration Details
_____________________________________________ ______ ______ __________ _________ ____________
{'TestClean/classCheck(Data=clean)' } true false false 0.66469 {1×1 struct}
{'TestClean/classCheck(Data=needsCleaning)' } true false false 0.0066959 {1×1 struct}
{'TestClean/sortCheck(Data=clean)' } true false false 0.0039298 {1×1 struct}
{'TestClean/sortCheck(Data=needsCleaning)' } true false false 0.003343 {1×1 struct}
{'TestClean/finiteCheck(Data=clean)' } true false false 0.055924 {1×1 struct}
{'TestClean/finiteCheck(Data=needsCleaning)'} true false false 0.0017951 {1×1 struct}
{'TestClean/noZeroCheck(Data=clean)' } true false false 0.90772 {1×1 struct}
{'TestClean/noZeroCheck(Data=needsCleaning)'} true false false 0.007801 {1×1 struct}
在测试文件外部创建数据集。
从外部数据集创建一个由
Parameter
实例组成的数组。
fromData
方法接受来自
TestClean
中
properties
块的参数化属性的名称,以及元胞数组(或结构体)形式的新数据。
使用外部参数创建一个新测试套件。框架将字符
#ext
追加到参数名称的末尾,表示参数是在外部定义的。
要完全控制套件中的参数名称,请使用结构体定义参数。然后,运行测试。
再创建一个数据集,并将其存储在 ASCII 分隔的文件中。
从存储的数据集和
A
创建参数,然后创建一个测试套件。
要使用测试文件中定义的参数以及在外部定义的参数运行测试,请串联测试套件。查看套件元素名称并运行测试。