2016-07-13 4 views
1

Ich verwende den Matlab-Komponententest, um die Behandlung ungültiger Parameter zu testen.Test auf eine von mehreren Ausnahmen in Matlab-Komponententests

Im Test habe ich eine Linie

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

, die in Matlab R2014a funktioniert gut, aber nicht in Matlab R2016a mit der Meldung

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

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

Ich frage mich, ob es möglich wäre, ob zu testen Eine der Ausnahmen wird ausgelöst.

Ich weiß, dass es möglich wäre,

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

aber etwas präziser wäre besser zu schreiben.

Antwort

2

Sie würden wahrscheinlich eine benutzerdefinierte Überprüfungsmethode schreiben, die ein Zellenarray von Ausnahmen als Eingabe akzeptiert.

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 

Eine andere Alternative besteht darin, die Fehlernachrichtenkennung dynamisch in Ihrem Testfall zu erhalten, indem Sie explizit den Fehler verursachen und den Bezeichner abrufen.

% 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) 
Verwandte Themen