Когда вы создаете макет, вы создаете связанный объект поведения, что средства управления дразнят поведение. Используйте этот объект получить доступ к прерванным сообщениям, отправленным от компонента под тестом к фиктивному объекту (процесс, известный шпионящий). Для получения дополнительной информации о создании макета смотрите, Создают Фиктивный объект.
В платформе для мокинга проверки являются функциями, используемыми, чтобы протестировать взаимодействия с объектом. Существует четыре типа проверок:
Верификации — Производят и записывают отказы, не выдавая исключение. Поскольку проверки не выдают исключения, все тесты выполняются до своего завершения, даже когда имеют место сбои в проверке. "Обычно проверки типа ""verification""являются основными для тестирования модуля, так как они обычно не требуют раннего выхода из теста.". Используйте другие типы проверки для выявления нарушений предварительных обязательных условий или неправильной настройки теста.
Предположения — Убедитесь, что тестовая среда соответствует предусловиям, которые в противном случае не приводят к непройденному тесту. Нарушение условий приводит к фильтрации тестов, а среда тестирования помечает тесты как незавершенные.
Утверждения — Убедитесь, что условие отказа делает недействительным остаток от текущего содержания теста, но не предотвращает соответствующее выполнение последующих методов тестирования. Отказ в точке утверждения отмечает текущий метод тестирования, как отказавший и неполный.
Критические утверждения — Аварийное прекращение работы сеанс тестирования после отказа. Эти типы проверки применяются, когда характер отказа настолько принципиален, что нет смысла продолжать тестирование. Эти виды проверки также применяются, когда отключение без изменений не восстанавливает состояние MATLAB® правильно, и лучше прекратить тестирование и начать новый сеанс.
Фиктивный объект является реализацией абстрактных методов и свойствами интерфейса, заданного суперклассом. Можно также создать макет без суперкласса, в этом случае макет имеет неявный интерфейс. Создайте макет с неявным интерфейсом для класса dice. Интерфейс включает Color
и NumSides
свойства и roll
метод, который принимает много dice и возвращает значение. В то время как интерфейс в настоящее время не реализован, можно создать макет с ним.
testCase = matlab.mock.TestCase.forInteractiveUse; [mock,behaviorObj] = testCase.createMock('AddedProperties', ... {'NumSides','Color'},'AddedMethods',{'roll'});
Поскольку макет записывает взаимодействия, отправленные в него, можно квалифицировать это, ложный метод был назван. Прокрутитесь каждый умирает.
val = mock.roll(1);
Проверьте что roll
метод был вызван 1, умирают.
testCase.verifyCalled(behaviorObj.roll(1))
Interactive verification passed.
Проверьте что roll
метод был вызван 3 dice. Этот тест сбои.
testCase.verifyCalled(behaviorObj.roll(3), ... 'roll method should have been called with input 3.')
Interactive verification failed. ---------------- Test Diagnostic: ---------------- roll method should have been called with input 3. --------------------- Framework Diagnostic: --------------------- verifyCalled failed. --> Method 'roll' was not called with the specified signature. --> Observed method call(s) with any signature: out = roll([1×1 matlab.mock.classes.Mock], 1) Specified method call: MethodCallBehavior [...] = roll(<Mock>, 3)
Проверьте что roll
метод не был вызван 2 dice.
testCase.verifyNotCalled(behaviorObj.roll(2))
Interactive verification passed.
Начиная с withAnyInputs
withExactInputs
, и withNargout
методы MethodCallBehavior
класс возвращает MethodCallBehavior
объекты, можно использовать их в проверках. Проверьте что roll
метод был назван, по крайней мере, однажды с любыми входными параметрами.
testCase.verifyCalled(withAnyInputs(behaviorObj.roll))
Interactive verification passed.
Проверьте что roll
метод не был вызван 2 выходными параметрами и любыми входными параметрами.
testCase.verifyNotCalled(withNargout(2,withAnyInputs(behaviorObj.roll)))
Interactive verification passed.
Подобно вызовам метода макет записывает операции доступа и набор свойств. Выберите цвет dice.
mock.Color = "red"
mock = Mock with properties: NumSides: [] Color: "red"
Проверьте, что цвет был выбран.
testCase.verifySet(behaviorObj.Color)
Interactive verification passed.
Проверьте, что к цвету получили доступ. Этот тест передает, потому что существует неявный доступ к свойству, когда MATLAB отображает объект.
testCase.verifyAccessed(behaviorObj.Color)
Interactive verification passed.
Утверждайте, что номер сторон не был определен.
testCase.assertNotSet(behaviorObj.NumSides)
Interactive assertion passed.
matlab.mock.TestCase
методы удобны для шпионажа за ложными взаимодействиями. Однако существует больше функциональности, когда вы используете класс в matlab.mock.constraints
пакет вместо этого. Чтобы использовать ограничение, передайте объект поведения и ограничение к verifyThat
assumeThat
assertThat
или fatalAssertThat
метод.
Создайте новый фиктивный объект.
testCase = matlab.mock.TestCase.forInteractiveUse; [mock,behaviorObj] = testCase.createMock('AddedProperties', ... {'NumSides','Color'},'AddedMethods',{'roll'});
Прокрутите 2 dice. Затем используйте ограничение, чтобы проверить что roll
метод был назван, по крайней мере, однажды с двумя dice.
val = mock.roll(2);
import matlab.mock.constraints.WasCalled
testCase.verifyThat(behaviorObj.roll(2),WasCalled)
Interactive verification passed.
Прокрутитесь каждый умирает. Затем проверьте что roll
метод был назван, по крайней мере, дважды с любыми входными параметрами.
val = mock.roll(1); testCase.verifyThat(withAnyInputs(behaviorObj.roll), ... WasCalled('WithCount',2))
Interactive verification passed.
Проверьте тот NumSides
не был получен доступ.
import matlab.mock.constraints.WasAccessed
testCase.verifyThat(behaviorObj.NumSides,~WasAccessed)
Interactive verification passed.
Выберите цвет dice. Затем проверьте, что свойство было установлено однажды.
mock.Color = "blue"; import matlab.mock.constraints.WasSet testCase.verifyThat(behaviorObj.Color,WasSet('WithCount',1))
Interactive verification passed.
Доступ к Color
свойство. Затем проверьте, что к этому не получили доступ точно однажды. Этот тест сбои.
c = mock.Color
testCase.verifyThat(behaviorObj.Color,~WasAccessed('WithCount',1))
c = "blue" Interactive verification failed. --------------------- Framework Diagnostic: --------------------- Negated WasAccessed failed. --> Property 'Color' was accessed the prohibited number of times. Actual property access count: 1 Prohibited property access count: 1 Specified property access: PropertyGetBehavior <Mock>.Color
Определите номер сторон. Затем проверьте, что номер сторон был определен к 22.
mock.NumSides = 22;
testCase.verifyThat(behaviorObj.NumSides,WasSet('ToValue',22))
Interactive verification passed.
Используйте ограничение от matlab.unittest.constraints
пакет, чтобы утверждать, что номер сторон dice не определяется к больше чем 20. Этот тест сбои.
import matlab.unittest.constraints.IsLessThanOrEqualTo testCase.verifyThat(behaviorObj.NumSides, ... WasSet('ToValue',IsLessThanOrEqualTo(20)))
Interactive verification failed. --------------------- Framework Diagnostic: --------------------- WasSet failed. --> Property 'NumSides' was not set to the specified value. --> Observed property set(s) to any value: <Mock>.NumSides = 22 Specified property set: PropertySetBehavior <Mock>.NumSides = <IsLessThanOrEqualTo constraint>
Тип проверки | TestCase Метод | matlab.mock.constraints Класс | |
---|---|---|---|
Используйте matlab.unittest.TestCase Метод | С matlab.mock.constraints Класс | ||
Метод был назван | verifyCalled или verifyNotCalled | verifyThat | WasCalled или Occurred |
assumeCalled или assumeNotCalled | assumeThat | ||
assertCalled или assertNotCalled | assertThat | ||
fatalAssertCalled или fatalAssertNotCalled | fatalAssertThat | ||
Метод был назван определенным числом времен | Не применяется | verifyThat assumeThat assertThat , или fatalAssertThat | WasCalled |
К свойству получили доступ | verifyAccessed или verifyNotAccessed | verifyThat | WasAccessed или Occurred |
assumeAccessed или assumeNotAccessed | assumeThat | ||
assertAccessed или assertNotAccessed | assertThat | ||
fatalAssertAccessed или fatalAssertNotAccessed | fatalAssertThat | ||
К свойству получили доступ определенное число времен | Не применяется | verifyThat assumeThat assertThat , или fatalAssertThat | WasAccessed |
Свойство было установлено | verifySet или verifyNotSet | verifyThat | WasSet или Occurred |
assumeSet или assumeNotSet | assumeThat | ||
assertSet или assertNotSet | assertThat | ||
fatalAssertSet или fatalAssertNotSet | fatalAssertThat | ||
Свойство было определено определенный номер времен | Не применяется | verifyThat assumeThat assertThat , или fatalAssertThat | WasSet |
Свойство было установлено в определенное значение | Не применяется | verifyThat assumeThat assertThat , или fatalAssertThat | WasSet или Occurred |
Методы были названы, и к свойствам получили доступ или установили в особом порядке | Не применяется | verifyThat assumeThat assertThat , или fatalAssertThat | Occurred |