В папке +WTrade/+Database/@PostgreSQLConnectionOptions
есть следующий класс:
classdef PostgreSQLConnectionOptions < handle
properties (Access = private)
databaseHost
end
methods (Access = public)
function this = PostgreSQLConnectionOptions()
this.databaseHost = "";
end
function setHostname(this, name)
if ~isstring(name)
me = MException("WTrade:invalidParameter", "WTrade.Database.PostgreSQLConnectionOption.setHostname: name must be a string");
throw(me);
end
if 1 ~= length(name)
me = MException("WTrade:invalidParameter", "WTrade.Database.PostgreSQLConnectionOption.setHostname: name array size must be 1");
throw(me);
end
this.databaseHost = name;
end
end
end
Я хочу выполнить модульный тест для этого класса. У меня есть следующий класс теста
classdef PostgreSQLConnectionOptionsTest < matlab.unittest.TestCase
methods (Test)
function testWrongHostnameArray(this)
options = WTrade.Database.PostgreSQLConnectionOptions();
hostName = ["h1" "h2"];
this.verifyError(options.setHostname(hostName), 'WTrade:invalidParameter');
end
end
end
Когда я пытаюсь запустить тест с помощью следующего сценария:
import matlab.unittest.TestSuite
import matlab.unittest.constraints.Throws;
databaseSuite = TestSuite.fromFolder("tests/WTrade/Database");
result = run(databaseSuite);
Я получаю следующую ошибку:
>> runtests('PostgreSQLConnectionOptionsTest','ProcedureName','testWrongHostnameArray')
Running PostgreSQLConnectionOptionsTest
32 options = WTrade.Database.PostgreSQLConnectionOptions();
================================================================================
Error occurred in PostgreSQLConnectionOptionsTest/testWrongHostnameArray and it did not run to completion.
---------
Error ID:
---------
'MATLAB:TooManyOutputs'
--------------
Error Details:
--------------
Error using WTrade.Database.PostgreSQLConnectionOptions/setHostname
Too many output arguments.
Error in PostgreSQLConnectionOptionsTest/testWrongHostnameArray (line 34)
this.verifyError(options.setHostname(hostName), 'WTrade:invalidParameter');
================================================================================
.
Done PostgreSQLConnectionOptionsTest
__________
Failure Summary:
Name Failed Incomplete Reason(s)
=======================================================================================
PostgreSQLConnectionOptionsTest/testWrongHostnameArray X X Errored.
ans =
TestResult with properties:
Name: 'PostgreSQLConnectionOptionsTest/testWrongHostnameArray'
Passed: 0
Failed: 1
Incomplete: 1
Duration: 2.0606
Details: [1×1 struct]
Totals:
0 Passed, 1 Failed (rerun), 1 Incomplete.
2.0606 seconds testing time.
Я не понимаю ошибку 'MATLAB:TooManyOutputs'
. Я попробовал метод прямо в Matlab, и он работает, как ожидалось;Я проверяю, является ли аргумент строкой, и если это не так, запускается исключение.
Когда я запускаю следующую команду:
a = WTrade.Database.PostgreSQLConnectionOptions
a.setHostname(["p1", "p2")
Я получаю ожидаемую ошибку.
Error using WTrade.Database.PostgreSQLConnectionOptions/setHostname (line 43)
WTrade.Database.PostgreSQLConnectionOption.setHostname: name array size must be 1
Так почему я не могу правильно отловить исключение в тестовом примере? Как я могу правильно проверить, что я выбрасываю исключение, чтобы я мог пройти тест?