exponenta event banner

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

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

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

  • Проверки - создание и регистрация отказов без исключения. Так как проверки не вызывают исключений, все содержимое теста выполняется до завершения даже при возникновении ошибок проверки. Как правило, проверки являются основной квалификацией для единичного теста, поскольку они обычно не требуют раннего выхода из теста. Используйте другие типы квалификации для проверки на нарушение предварительных условий или неправильной настройки теста.

  • Допущения - убедитесь, что среда тестирования соответствует предварительным условиям, которые в противном случае не приводят к отказу теста. Предполагаемые сбои приводят к отфильтрованным тестам, и платформа тестирования помечает тесты как неполные.

  • Утверждения - убедитесь, что состояние отказа аннулирует остальную часть текущего содержимого теста, но не препятствует надлежащему выполнению последующих методов тестирования. Сбой в точке утверждения помечает текущий метод тестирования как неуспешный и неполный.

  • Неустранимые утверждения - прервать тестовый сеанс при сбое. Эти требования полезны, когда режим отказа настолько фундаментален, что нет смысла продолжать тестирование. Эта квалификация также полезна, когда отрыв приспособления не восстанавливает состояние MATLAB ® правильно, и предпочтительно прервать тестирование и начать новую сессию.

Объект mock является реализацией абстрактных методов и свойств интерфейса, заданных суперклассом. Можно также создать макет без суперкласса, в этом случае макет имеет неявный интерфейс. Создайте макет с неявным интерфейсом для класса кости. Интерфейс включает в себя 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 или 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