Создание пользовательского ограничения

Этот пример показывает, как создать пользовательское ограничение, которое определяет, одного размера ли данное значение как ожидаемое значение.

В файле в вашей рабочей папке создайте 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]

Смотрите также

Похожие темы