Используйте параметры в основанных на классах тестах

Часто, необходимо запустить серию тестов, которые отличаются только в терминах тестовых данных. Например, вы можете хотеть протестировать это, функция производит ожидаемые выходные параметры для различных входных параметров. В этом случае тестовая логика является тем же самым, и единственной разницей между тестами являются фактические и ожидаемые значения для каждого вызова функции. С параметрированным тестированием можно реализовать код, чтобы итеративно запустить тесты с помощью различных значений данных. Когда метод параметрируется, среда тестирования автоматически вызывает метод для каждого значения параметров. Поэтому вы не обязаны реализовывать отдельный метод для каждого значения.

Среда тестирования позволяет вам параметрировать свой тестовый класс на разных уровнях. Кроме того, когда вы вызываете тестовый метод класса несколькими параметрами, можно задать, как метод должен быть вызван для различных комбинаций параметров.

Как записать параметрированные тесты

Классы, которые выводят из matlab.unittest.TestCase класс может реализовать тестовую параметризацию с помощью специфичного для среды свойства и атрибутов метода. Чтобы обеспечить данные как параметры в вашем основанном на классах тесте, задайте данные с помощью properties блокируйтесь с соответствующим атрибутом параметризации. Затем передайте свойство параметризации как входной параметр к одному или нескольким методам.

Например, рассмотрите SampleTest класс. Класс задает параметрированный тест, потому что он задает свойство в properties блокируйтесь с TestParameter атрибут. Свойство передается Test метод и используется, чтобы выполнить проверку.

classdef SampleTest < matlab.unittest.TestCase
    properties (TestParameter)
        Number = {1,2,'3',4,5};
    end
    methods(Test)
        function testDouble(testCase,Number)
            testCase.verifyClass(Number,'double')
        end
    end
end

Поскольку Number массив ячеек с пятью элементами, тестовыми результатами класса в параметрированном тестовом наборе с пятью элементами.

suite = testsuite('SampleTest');
{suite.Name}'
ans =

  5×1 cell array

    {'SampleTest/testDouble(Number=value1)'}
    {'SampleTest/testDouble(Number=value2)'}
    {'SampleTest/testDouble(Number=value3)'}
    {'SampleTest/testDouble(Number=value4)'}
    {'SampleTest/testDouble(Number=value5)'}

Значение, присвоенное свойству параметризации, должно быть или непустым массивом ячеек или скалярной структурой по крайней мере с одним полем. MATLAB® использует значение свойства, чтобы задать название и значение параметра в тестовом наборе:

  • Если значение свойства является массивом ячеек из символьных векторов, MATLAB генерирует названия параметра от значений в массиве ячеек. В противном случае MATLAB задает названия параметра как value1, value2, …, valueN.

  • Если значение свойства является структурой, поля структуры представляют названия параметра, и значения структуры представляют значения параметров. Чтобы включать описательные названия параметра в набор, задайте параметры с помощью структуры вместо массива ячеек.

Как инициализировать свойства параметризации

Когда вы задаете свойство параметризации, необходимо инициализировать свойство так, чтобы MATLAB мог сгенерировать название и значение параметра. Можно инициализировать свойство или в тестовое время загрузки класса или во время создания тестового набора:

  • Время загрузки класса: Если значение свойства может быть определено в то время, когда MATLAB загружает тестовое определение класса, инициализируйте свойство с помощью значения по умолчанию. Можно задать значение по умолчанию в properties блокируйтесь или использование локальной функции в classdef файл. Для получения дополнительной информации о присвоении значений в определении класса, смотрите Оценку Выражений в Определениях классов.

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

  • Время создания набора: Если вы не можете или не хотеть определять параметры во время загрузки класса, инициализировать свойство во время создания набора с помощью статического метода с TestParameterDefinition атрибут. Когда вы инициализируете свойство параметризации TestParameterDefinition метод, параметры, сопоставленные со свойством, может варьироваться для различных тестовых прогонов. Каждый раз, когда вы создаете набор из параметрированного тестового класса, среда генерирует новое название и значение параметра, чтобы запустить тесты. Для получения дополнительной информации смотрите, Задают Параметры во Время Создания Набора.

Если вы присваиваете значение свойству параметризации, не изменяйте его. Например, когда вы инициализируете свойство параметризации с помощью значения по умолчанию, вы не можете использовать TestParameterDefinition метод, чтобы перезаписать значение по умолчанию.

Параметр может использоваться несколькими модульными тестами. Тесты с помощью того же параметра должны запуститься независимо, случайно не влияя друг на друга. Кроме того, рабочий тест не должен влиять на последующие повторные выполнения того же теста. Чтобы гарантировать независимость тестового прогона, инициализируйте свои свойства параметризации объектами значения. Используя объекты указателя (такие как графические объекты MATLAB) как значения параметров не рекомендуется. Для получения дополнительной информации о поведении значения и объектов указателя, смотрите Сравнение Классов Указателя и Значения.

Если необходимо протестировать объекты указателя в параметрированном тесте, рассмотрите построение их косвенно при помощи указателей на функцию как значения параметров и вызов тех указателей на функцию в тестах. Например, запишите параметрированный тест, чтобы протестировать текущую точку по умолчанию фигур, созданных с figure и uifigure функции.

classdef FigureTest < matlab.unittest.TestCase
    properties (TestParameter)
        FigureType = {@figure, @uifigure};
    end
    methods(Test)
        function defaultCurrentPoint(testCase,FigureType)
            fig = FigureType();
            testCase.addTeardown(@close,fig)
            cp = fig.CurrentPoint;
            testCase.verifyEqual(cp,[0 0])
        end
    end
end

Задайте уровень параметризации

Можно параметрировать тестовый класс на трех уровнях: настройка класса, настройка метода и тест. Параметризация на каждом уровне требует свойств параметризации иметь определенный атрибут свойства. Например, на высшем уровне, TestClassSetup метод может быть параметрирован с помощью свойства, заданного в properties блокируйтесь с ClassSetupParameter атрибут. На самом низком уровне, Test метод может быть параметрирован с помощью свойства, заданного в properties блокируйтесь с TestParameter атрибут.

Эта таблица показывает различные уровни параметризации и требуемый метод и атрибуты свойства для каждого уровня.

Уровень параметризацииОпределение параметризацииДоступные свойства параметризации
Атрибут методаАтрибут свойства
Уровень настройки классаTestClassSetupClassSetupParameterClassSetupParameter
Уровень настройки методаTestMethodSetupMethodSetupParameterMethodSetupParameter и ClassSetupParameter
Протестируйте уровеньTestTestParameterTestParameter, MethodSetupParameter, и ClassSetupParameter

Параметризованный метод может получить доступ к свойствам параметризации в зависимости от уровня, на котором задан метод:

  • Параметрированный TestClassSetup метод может получить доступ к свойствам параметризации только с ClassSetupParameter атрибут.

  • Параметрированный TestMethodSetup метод может получить доступ к свойствам параметризации только с MethodSetupParameter или ClassSetupParameter атрибуты.

  • Параметрированный Test метод может получить доступ к любым свойствам параметризации.

Для примера того, как параметрировать тестовый класс на разных уровнях, смотрите, Создают Усовершенствованный Параметрированный Тест.

Задайте, как объединены параметры

Когда вы передаете больше чем одно свойство параметризации методу, можно использовать ParameterCombination атрибут метода, чтобы задать, как объединены параметры. Среда тестирования вызывает метод для заданных комбинаций.

Эта таблица показывает различные стратегии комбинации параметра.

ParameterCombination АтрибутВызов метода
'exhaustive' (значение по умолчанию)

Методы вызываются для всех комбинаций значений параметров. Среда тестирования использует эту комбинацию по умолчанию, если вы не задаете ParameterCombination атрибут.

'sequential'

Методы вызываются с соответствующими значениями от каждого параметра. Каждый параметр должен содержать то же количество значений. Например, если методу предоставляют два свойства параметризации, и каждое свойство задает три значения параметров, то среда вызывает метод три раза.

'pairwise'

Методы вызываются для каждой пары значений параметров по крайней мере в один раз. Например, если методу предоставят три свойства параметризации, среда тестирования гарантирует, что метод вызывается для каждой комбинации значений параметров, заданных любыми двумя свойствами.

По сравнению с 'exhaustive' комбинация, 'pairwise' комбинация обычно приводит к меньшему количеству тестов и поэтому более быстрого выполнения теста. В то время как среда гарантирует, что тесты создаются для каждой пары значений по крайней мере в один раз, когда вы не должны использовать размер набора, упорядоченное расположение или определенный набор элементов тестового набора.

Можно объединить параметры при настройке класса, настройке метода, и протестировать уровни. Например, используйте объединенные атрибуты метода TestMethodSetup, ParameterCombination = 'sequential' задавать последовательную комбинацию параметров уровня настройки метода, заданных в properties блокируйтесь с MethodSetupParameter атрибут.

Для примеров того, как объединить тестовые параметры, смотрите, Создают Основной Параметрированный Тест и Создают Усовершенствованный Параметрированный Тест.

Используйте внешние параметры в тестах

Когда вы создаете параметрированный тест, можно переопределить параметры путем введения входных параметров в основанный на классах тест. Чтобы обеспечить данные, которые заданы за пределами тестового файла, создайте Parameter экземпляр и использование 'ExternalParameter' опция при создании тестового набора. Для получения дополнительной информации смотрите Использование Внешние Параметры в Параметрированном Тесте.

Смотрите также

| |

Похожие темы