在Matlab单元测试中测试多个异常之一

时间:2016-07-13 07:47:46

标签: matlab unit-testing exception-handling

我正在使用Matlab的unittest来测试无效参数的处理。

在测试中我有一行

t.verifyError(@myObject.myMethod, 'MATLAB:nonStrucReference');

在Matlab R2014a中工作正常,但在Matlab R2016a中失败并显示消息

---------------------
Framework Diagnostic:
---------------------
verifyError failed.
--> The function threw the wrong exception.

    Actual Exception:
        'MATLAB:structRefFromNonStruct'
    Expected Exception:
        'MATLAB:nonStrucReference'

我想知道是否可以测试是否抛出其中一个异常。

我知道可以写

t.verifyError(@myObject.myMethod, ?MException);

但更具体的东西会更好。

1 个答案:

答案 0 :(得分:2)

您可能希望编写一个自定义验证方法,该方法接受异常的单元格数组作为输入。

function verifyOneOfErrors(testcase, func, identifiers, varargin)

    % Ensure that a cell array was passed rather than a string
    if ischar(identifiers)
        identifiers = {identifiers};
    end

    % If the function succeeds with no errors, then we want a failure
    threw_correct_error = false;

    try
        func()
    catch ME
        % Check if the identifier is in our list of approved identifiers
        threw_correct_error = ismember(ME.identifier, identifiers);
    end

    % Do the actual verification
    testcase.verifyTrue(threw_correct_error, varargin{:})
end

另一种方法是通过显式导致错误并检索标识符,在您的测试用例中动态获取错误消息标识符。

% Get a version-specific identifier for this specific error
try; a = []; a.field; catch ME; end;

% Verify that your method throws this error
t.verifyError(@myObject.myMethod, ME.identifier)