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

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

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

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

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

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

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

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

  5×1 cell array

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

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

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

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

Можно использовать локальные функции в classdef файлы, чтобы присвоить значения по умолчанию свойствам параметризации. Однако локальные функции должны возвратить массив ячеек или скалярную структуру.

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

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

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

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

Уровень параметризацииОпределение параметризацииДоступные свойства параметризации
Атрибут методаАтрибут свойства
Уровень настройки класса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' опция при создании тестового набора. Для получения дополнительной информации смотрите Использование Внешние Параметры в Параметрированном Тесте.

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

| |

Похожие темы