如何使用MATLAB写测试(2)Negative Test
原文:如何使用MATLAB写测试(2)Negative Test - 知乎 (zhihu.com)
上一篇请参见
上一篇中,我们的实习生(来自俄罗斯)开发了知名的foo程序
function out = foo(in)
validateattributes(in,{'numeric'},{'nonempty'});
% Returns zero
out = zeros(size(in),'like',in);
end
并加入了positive test case,接下来他想测试各种错误输入,期待有正确的错误反应。于是他发现了MATLAB Unittest中verifyError这个神奇的method. 阅读verifyError的文档后,实习生发现他需要一个error的identifier,作为一名合格的实习生,他知道用lasterr来获取这个id:
>>foo([])
Error using foo (line 2)
Expected input to be nonempty.
>>[~,id] = lasterr
id =
MATLAB:expectedNonempty
于是他更新了自己的测试,加入了testEmptyError这个新的negative test case.
%% 所有的单元测试都需要从matlab.unittest.TestCase继承
classdef myTest < matlab.unittest.TestCase
%% 定义以Test为attribute的methods
methods (Test)
% 定义你自己的测试
function testSingle(test) %function唯一的参数test是你的测试对象
% Verifies single input case
in = single(10); %输入
expOut = zeros(1,'single'); %期待的输出
actualOut = foo(in); %调用待测程序
test.verifyEqual(actualOut,expOut); %比较实际输出与期待输出
end
% Negative test case
function testEmptyError(test)
% Verifies error on empty input
in = [];
expErrorId = 'MATLAB:expectedNonempty';
%传入function handle, 给出期待的error id
test.verifyError(@()foo(in),expErrorId);
end
end
end
跑test
>> result = runtests('myTest')
Running myTest
..
Done myTest
__________
result =
1x2 TestResult array with properties:
Name
Passed
Failed
Incomplete
Duration
Details
Totals:
2 Passed, 0 Failed, 0 Incomplete.
0.044067 seconds testing time.
实习生很开心,实习生回家睡觉了。睡前他默念,MATLAB unittest大法好......
希望对大家有帮助。