如何使用MATLAB写测试(2)Negative Test

如何使用MATLAB写测试(2)Negative Test

原文:如何使用MATLAB写测试(2)Negative Test - 知乎 (zhihu.com)

上一篇请参见

如何使用MATLAB写测试(1) - 知乎专栏

上一篇中,我们的实习生(来自俄罗斯)开发了知名的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大法好......

希望对大家有帮助。

相关推荐
ytttr8731 分钟前
MATLAB ViBe算法视频前景提取完整实现
算法·matlab·音视频
见叶之秋1 分钟前
【数据结构】详解栈和队列
数据结构
MicoZone2 分钟前
源码-redisson
java
Book思议-5 分钟前
【数据结构】二叉树小题
数据结构·算法
happymaker06266 分钟前
请求头 & 文件下载 & JSP 内置对象实战
java·前端·servlet
CoderCodingNo8 分钟前
【GESP】C++五级练习题 luogu-P1303 A*B Problem | 高精度计算
数据结构·c++·算法
故事和你918 分钟前
洛谷-算法1-1-模拟与高精度2
开发语言·数据结构·c++·算法·动态规划
B1acktion8 分钟前
2.6.堆排序——从堆结构到 Top-K,一套思路贯穿排序与选择
数据结构·c++·算法·排序算法
Cosmoshhhyyy10 分钟前
《Effective Java》解读第46条:优先选择Stream中无副作用的函数
java·windows·python
无籽西瓜a12 分钟前
【西瓜带你学设计模式 | 第十一期 - 模板方法模式】模板方法模式 —— 流程骨架与钩子实现、优缺点与适用场景
java·后端·设计模式·软件工程·模板方法模式