我不确定执行单元测试时如何传递变量。这些变量是通过未置于单元测试中的另一个函数创建的。
方法1:
classdef myTest < matlab.unittest.TestCase
properties
A, B, C
end
methods (Test)
function testDataCoverage(testCase)
expSol = afunction(A, B, C)
actSol = 10
testCase.verifyEqual(testCase, actSol, expSol)
end
end
end
我接下来尝试将变量创建函数(getData)放在单元测试中,但是遇到此错误:
混凝土类myTest没有定义名为的TestParameter属性 BdataCoverage方法的新增功能。实现属性或 将类定义为Abstract。
方法2:
classdef myTest < matlab.unittest.TestCase
properties
end
methods (Test)
function testDataCoverage(testCase)
[A, B, C] = getData()
expSol = afunction(A, B, C)
actSol = 10
testCase.verifyEqual(testCase, actSol, expSol)
end
function [A, B, C] = getData()
...code here...
end
function Sol = afunction(A, BNew, C)
...code here...
end
end
end
答案 0 :(得分:5)
我认为您要使用的是TestParameter:
classdef myTest < matlab.unittest.TestCase
properties (TestParameter)
param = {1, 2};
end
methods (Test)
function testDataCoverage(testCase, param)
testCase.verifyEqual(param, 1);
end
end
end
然后,Matlab将自动创建n个测试用例(对于单元格列表中的每个条目),其中参数参数将与TestParameter的另一个条目相关联。因此,您将自动循环所有它们。 (注意:如果每个TestCase包含多个TestParamater,则可能需要研究Matlab文档中的ParameterCombination ...)
这些TestParameter也可以通过(外部)静态方法创建:
classdef myTest Fiy:此外部源仅会触发一次,直到解析该类为止。然后它将停留在内存中,并且matlab缓存该状态。如果您在此处阅读了一些外部配置文件,则可能需要 子答案:在您的Method2块中, properties (TestParameter)
param = myTest.getData();
end
methods (Test)
function testDataCoverage(testCase, param)
testCase.verifyEqual(param, 1);
end
end
methods (Static)
function data = getData()
data = {1,2,3};
end
end
end
clear all
来强制重新创建该类。 [A, B, C] = getData()
缺少自引用myTest.getData()
。
答案 1 :(得分:1)
MATLAB R2018b刚出门。在此版本中,您现在可以灵活地将测试参数数据注入到基于MATLAB类的测试文件中,而无需修改文件。
数据在MATLAB工作区中的测试文件外部定义。就您而言,您将可以执行以下操作:
classdef myTest< matlab.unittest.TestCase
properties (TestParameter)
A = {1}; % default value for A
B = {2}; % default value for B
C = {3}; % default value for C
end
methods (Test)
function testDataCoverage(testCase, A,B,C)
expSol = afunction(A, B, C);
actSol = 10;
testCase.verifyEqual(testCase, actSol, expSol);
end
end
end
%Injecting values of A, B and C without modifying the test file
import matlab.unittest.parameters.Parameter;
import matlab.unittest.TestSuite;
>> params = Parameter.fromData( ...
'A', {11}, ...
'B', {21},...
'C', {31}...
);
% Generating suites with the external data
>> suite = TestSuite.fromFile('mytest.m', 'ExternalParameters', params);
% Running test with external data
>> run(suite)
这里是详细的文档: https://www.mathworks.com/help/matlab/ref/matlab.unittest.testsuite.fromfile.html https://www.mathworks.com/help/matlab/matlab_prog/use-external-parameters-in-parameterized-test.html