我正在使用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);
但更具体的东西会更好。
答案 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)