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

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

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

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

Сводные данные проверок

Тип проверкиМетод TestCasematlab.mock. ограничительный класс
Используйте метод 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
Была ли эта тема полезной?