Квалификация взаимодействия Макетов

Когда вы создаете макет, вы создаете связанный объект поведения, который управляет поведением 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 или verifyNotCalledverifyThatWasCalled или Occurred
assumeCalled или assumeNotCalledassumeThat
assertCalled или assertNotCalledassertThat
fatalAssertCalled или fatalAssertNotCalledfatalAssertThat
Метод назывался определенное количество разНе применяетсяverifyThat, assumeThat, assertThat, или fatalAssertThatWasCalled
Доступ к свойству был полученverifyAccessed или verifyNotAccessedverifyThatWasAccessed или Occurred
assumeAccessed или assumeNotAccessedassumeThat
assertAccessed или assertNotAccessedassertThat
fatalAssertAccessed или fatalAssertNotAccessedfatalAssertThat
К свойству обращались определенное количество разНе применяетсяverifyThat, assumeThat, assertThat, или fatalAssertThatWasAccessed
Задано свойствоverifySet или verifyNotSetverifyThatWasSet или Occurred
assumeSet или assumeNotSetassumeThat
assertSet или assertNotSetassertThat
fatalAssertSet или fatalAssertNotSetfatalAssertThat
Свойство было задано определенное количество разНе применяетсяverifyThat, assumeThat, assertThat, или fatalAssertThatWasSet
Свойство было установлено на определенное значениеНе применяетсяverifyThat, assumeThat, assertThat, или fatalAssertThatWasSet или Occurred
Методы были вызваны, и свойства были доступны или установлены в конкретном порядкеНе применяетсяverifyThat, assumeThat, assertThat, или fatalAssertThatOccurred