Квалификация взаимодействия фиктивного объекта

Когда вы создаете макет, вы создаете связанный объект поведения, что средства управления дразнят поведение. Используйте этот объект получить доступ к прерванным сообщениям, отправленным от компонента под тестом к фиктивному объекту (процесс, известный шпионящий). Для получения дополнительной информации о создании макета смотрите, Создают Фиктивный объект.

В платформе для мокинга проверки являются функциями, используемыми, чтобы протестировать взаимодействия с объектом. Существует четыре типа проверок:

  • Верификации — Производят и записывают отказы, не выдавая исключение. Поскольку проверки не выдают исключения, все тесты выполняются до своего завершения, даже когда имеют место сбои в проверке. "Обычно проверки типа ""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.

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