Этот пример показывает, как создать пользовательское булево ограничение, которое определяет, одного размера ли данное значение как ожидаемое значение.
В файле в вашей рабочей папке создайте файл 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