Когда вы создаете макет, вы создаете связанный объект поведения, что средства управления дразнят поведение. Используйте этот объект получить доступ к прерванным сообщениям, отправленным от компонента под тестом к фиктивному объекту (процесс, известный шпионящий). Для получения дополнительной информации о создании макета смотрите, Создают Фиктивный объект.
В платформе для мокинга проверки являются функциями, используемыми, чтобы протестировать взаимодействия с объектом. Существует четыре типа проверок:
Верификации — Производят и записывают отказы, не выдавая исключение. Поскольку проверки не выдают исключения, все тесты выполняются до своего завершения, даже когда имеют место сбои в проверке. "Обычно проверки типа ""verification""являются основными для тестирования модуля, так как они обычно не требуют раннего выхода из теста.". Используйте другие типы проверки для выявления нарушений предварительных обязательных условий или неправильной настройки теста.
Предположения — Гарантируют, что тестовая среда соответствует предусловиям, которые в противном случае не приводят к непройденному тесту. Нарушение условий приводит к фильтрации тестов, а среда тестирования помечает тесты как незавершенные.
Утверждения — Гарантируют, что условие отказа делает недействительным остаток от текущего содержания теста, но не предотвращает соответствующее выполнение последующих методов тестирования. Отказ в точке утверждения отмечает текущий метод тестирования, как отказавший и неполный.
Критические утверждения — Аварийное прекращение работы сеанс тестирования после отказа. Эти типы проверки применяются, когда характер отказа настолько принципиален, что нет смысла продолжать тестирование. Эти виды проверки также применяются, когда отключение без изменений не восстанавливает состояние MATLAB® правильно, и лучше прекратить тестирование и начать новый сеанс.
Фиктивный объект является реализацией абстрактных методов и свойствами интерфейса, заданного суперклассом. Можно также создать макет без суперкласса, в этом случае макет имеет неявный интерфейс. Создайте макет с неявным интерфейсом для класса игры в кости. Интерфейс включает свойства Color
и NumSides
и метод roll
, который принимает много игр в кости и возвращает значение. В то время как интерфейс в настоящее время не реализован, можно создать макет с ним.
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 играми в кости. Этот тест сбои.
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 играми в кости.
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.
Подобно вызовам метода макет записывает операции доступа и набор свойств. Выберите цвет игры в кости.
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 игры в кости. Затем используйте ограничение, чтобы проверить, что метод roll
был назван, по крайней мере, однажды с двумя играми в кости.
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.
Выберите цвет игры в кости. Затем проверьте, что свойство было установлено однажды.
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
, чтобы утверждать, что номер сторон игры в кости не определяется к больше чем 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 |