Этот пример показывает, как создать пользовательское булево ограничение, которое определяет, одного размера ли данное значение как ожидаемое значение.
В файле в вашей рабочей папке создайте файл HasSameSizeAs.m. Конструктор принимает, что значение выдерживает сравнение с фактическим размером. Это значение хранится в свойстве ValueWithExpectedSize. Поскольку рекомендуется, чтобы реализации BooleanConstraint были неизменяемыми, установите атрибут свойства SetAccess на immutable.
classdef HasSameSizeAs < matlab.unittest.constraints.BooleanConstraint properties(SetAccess=immutable) ValueWithExpectedSize end methods function constraint = HasSameSizeAs(value) constraint.ValueWithExpectedSize = value; end end end
Включайте эти методы в блок methods в HasSameSizeAs.m. Поскольку класс BooleanConstraint является подклассом Constraint, классы, которые выводят от него, должны реализовать методы getDiagnosticFor и satisfiedBy. Для получения дополнительной информации об этих методах, смотрите matlab.unittest.constraints.Constraint.
methods
function bool = satisfiedBy(constraint, actual)
bool = isequal(size(actual), size(constraint.ValueWithExpectedSize));
end
function diag = getDiagnosticFor(constraint, actual)
import matlab.unittest.diagnostics.StringDiagnostic
if constraint.satisfiedBy(actual)
diag = StringDiagnostic('HasSameSizeAs passed.');
else
diag = StringDiagnostic(sprintf(...
'HasSameSizeAs failed.\nActual Size: [%s]\nExpectedSize: [%s]',...
int2str(size(actual)),...
int2str(size(constraint.ValueWithExpectedSize))));
end
end
endВключайте метод getNegativeDiagnosticFor в блок methods с защищенным доступом в HasSameSizeAs.m. Классы, которые выводят от BooleanConstraint, должны реализовать метод getNegativeDiagnosticFor. Этот метод должен обеспечить объект Diagnostic, который выражается в отрицательном смысле ограничения.
methods(Access=protected)
function diag = getNegativeDiagnosticFor(constraint, actual)
import matlab.unittest.diagnostics.StringDiagnostic
if constraint.satisfiedBy(actual)
diag = StringDiagnostic(sprintf(...
['Negated HasSameSizeAs failed.\nSize [%s] of ' ...
'Actual Value and Expected Value were the same ' ...
'but should not have been.'], int2str(size(actual))));
else
diag = StringDiagnostic('Negated HasSameSizeAs passed.');
end
end
endВ обмен на реализацию требуемых методов ограничение наследовало соответствующий and, or и перегрузки not, таким образом, это может объединяться с другими объектами BooleanConstraint или отрицаться.
Сводные данные определения класса HasSameSizeAs
В командной строке создайте тест для интерактивного тестирования.
import matlab.unittest.TestCase import matlab.unittest.constraints.HasLength testCase = TestCase.forInteractiveUse;
Протестируйте передающий случай.
testCase.verifyThat(zeros(5), HasLength(5) | ~HasSameSizeAs(repmat(1,5)))
Interactive verification passed.
Тест передает, потому что одно из условий or, HasLength(5), верно.
Протестируйте провальный случай.
testCase.verifyThat(zeros(5), HasLength(5) & ~HasSameSizeAs(repmat(1,5)))
Interactive verification failed.
---------------------
Framework Diagnostic:
---------------------
AndConstraint failed.
--> + [First Condition]:
| HasLength passed.
--> AND
+ [Second Condition]:
| Negated HasSameSizeAs failed.
| Size [5 5] of Actual Value and Expected Value were the same but should not have been.
-+---------------------Тест перестал работать, потому что одно из условий and, ~HasSameSizeAs(repmat(1,5)), является ложным.
matlab.unittest.constraints.BooleanConstraint