2016-07-13 75 views
1

我正在使用Matlab的unittest來測試無效參數的處理。在Matlab中測試多個異常中的一個例外測試

在測試中我有一個線

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); 

,但更具體的東西會更好。

回答

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) 
相關問題