Этот пример показывает, как создать пользовательское ограничение, которое определяет, одного размера ли данное значение как ожидаемое значение.
В файле в вашей рабочей папке создайте HasSameSizeAs.m
. Конструктор принимает, что значение выдерживает сравнение с фактическим размером. Это значение хранится в свойстве ValueWithExpectedSize
. Поскольку рекомендуется, чтобы реализации Constraint
были неизменяемыми, установите атрибут свойства SetAccess
на immutable
.
classdef HasSameSizeAs < matlab.unittest.constraints.Constraint properties(SetAccess=immutable) ValueWithExpectedSize end methods function constraint = HasSameSizeAs(value) constraint.ValueWithExpectedSize = value; end end end
Классы, которые выводят от Constraint
, должны реализовать метод satisfiedBy
. Этот метод должен содержать логику сравнения и возвратить значение boolean
.
Включайте метод satisfiedBy
в блок methods
в HasSameSizeAs.m
.
function bool = satisfiedBy(constraint, actual) bool = isequal(size(actual), size(constraint.ValueWithExpectedSize)); end
Если фактический размер и ожидаемый размер равны, этот метод возвращает true
.
Получение классов от Constraint
должно реализовать метод getDiagnosticFor
. Этот метод должен оценить фактическое значение против ограничения и обеспечить объект Diagnostic
. В этом примере getDiagnosticFor
возвращает StringDiagnostic
. Включайте метод getDiagnosticFor
в блок methods
в HasSameSizeAs.m
.
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
Сводные данные определения класса HasSameSizeAs
В командной строке создайте тест для интерактивного тестирования.
import matlab.unittest.TestCase
testCase = TestCase.forInteractiveUse;
Протестируйте передающий случай.
testCase.verifyThat(zeros(5), HasSameSizeAs(repmat(1,5)))
Interactive verification passed.
Протестируйте провальный случай.
testCase.verifyThat(zeros(5), HasSameSizeAs(ones(1,5)))
Interactive verification failed. --------------------- Framework Diagnostic: --------------------- HasSameSizeAs failed. Actual Size: [5 5] ExpectedSize: [1 5]
matlab.unittest.constraints.Constraint