Когда вы создаете макет, вы создаете связанный объект поведения, который управляет поведением mock. Используйте этот объект для доступа к перехваченным сообщениям, отправленным из тестируемого компонента, объекту mock (процессу, известному как шпионаж). Дополнительные сведения о создании макета см. в разделе Создание объекта макета.
В платформа для мокинга qualifications являются функциями, используемыми для тестирования взаимодействий с объектом. Существует четыре типа проверки:
Верификации - Создание и запись отказов без выдачи исключения. Поскольку верификации не выдают исключения, все содержания теста запусков к завершению, даже когда верификация отказов произойти. Как правило, верификации типа «verification» являются основными для модульного теста, поскольку они обычно не требуют раннего выхода из теста. Используйте другие типы проверки для выявления нарушений предусловий или неправильной настройки теста.
Допущения - убедитесь, что тестовая среда соответствует предусловиям, которые не приводят к непройденному тесту. Нарушение условий приводит к отфильтрованным тестам, а среда тестирования помечает тесты как незавершенные.
Утверждения - Убедитесь, что сбой условия делает недействительным оставшуюся часть текущего содержания теста, но не препятствует правильному выполнению последующих методов тестирования. При отказе в точку утверждения текущий метод тестирования помечается как неудачный и неполный.
Критические утверждения - Прерывание тестового сеанса после отказа. Эти типы проверки применяются, когда тип отказа настолько принципиален, что нет точки продолжать тестирование. Эти типы проверки также применяются фиксатором когда отключение не восстанавливает MATLAB® состояние правильно, и лучше прекратить проверку и начать новую сессию.
Объект mock является реализацией абстрактных методов и свойств интерфейса, заданных суперклассом. Можно также создать мок без суперкласса, в этом случае мок имеет неявный интерфейс. Создайте мок с неявным интерфейсом для класса dice. Интерфейс включает в себя Color
и NumSides
свойства и roll
метод, который принимает некоторое количество dice и возвращает значение. Пока интерфейс в данный момент не реализован, с ним можно создать макет.
testCase = matlab.mock.TestCase.forInteractiveUse; [mock,behaviorObj] = testCase.createMock('AddedProperties', ... {'NumSides','Color'},'AddedMethods',{'roll'});
Поскольку макет записывает посланные ему взаимодействия, можно проверить, что был вызван метод mock. Закрутите одну штуку.
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.
The matlab.mock.TestCase
методы удобны для слежки за имитационными взаимодействиями. Однако существует больше функциональности, когда вы используете класс в matlab.mock.constraints
вместо этого упаковать. Чтобы использовать ограничение, передайте объект поведения и ограничение в verifyThat
, assumeThat
, assertThat
или fatalAssertThat
способ.
Создайте новый объект mock.
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 |