Часто, необходимо запустить серию тестов, которые отличаются только в терминах тестовых данных. Например, вы можете хотеть протестировать это, функция производит ожидаемые выходные параметры для различных входных параметров. В этом случае тестовая логика является тем же самым, и единственной разницей между тестами являются фактические и ожидаемые значения для каждого вызова функции. С параметрированным тестированием можно реализовать код, чтобы итеративно запустить тесты с помощью различных значений данных. Когда метод параметрируется, среда тестирования автоматически вызывает метод для каждого значения параметров. Поэтому вы не обязаны реализовывать отдельный метод для каждого значения.
Среда тестирования позволяет вам параметрировать свой тестовый класс на разных уровнях. Кроме того, когда вы вызываете тестовый метод класса несколькими параметрами, можно задать, как метод должен быть вызван для различных комбинаций параметров.
Классы, которые выводят из 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
атрибут.
Эта таблица показывает различные уровни параметризации и требуемый метод и атрибуты свойства для каждого уровня.
Уровень параметризации | Определение параметризации | Доступные свойства параметризации | |
---|---|---|---|
Атрибут метода | Атрибут свойства | ||
Уровень настройки класса | TestClassSetup | ClassSetupParameter | ClassSetupParameter |
Уровень настройки метода | TestMethodSetup | MethodSetupParameter | MethodSetupParameter и ClassSetupParameter |
Протестируйте уровень | Test | TestParameter | TestParameter , MethodSetupParameter , и ClassSetupParameter |
Параметризованный метод может получить доступ к свойствам параметризации в зависимости от уровня, на котором задан метод:
Параметрированный TestClassSetup
метод может получить доступ к свойствам параметризации только с ClassSetupParameter
атрибут.
Параметрированный TestMethodSetup
метод может получить доступ к свойствам параметризации только с MethodSetupParameter
или ClassSetupParameter
атрибуты.
Параметрированный Test
метод может получить доступ к любым свойствам параметризации.
Для примера того, как параметрировать тестовый класс на разных уровнях, смотрите, Создают Усовершенствованный Параметрированный Тест.
Когда вы передаете больше чем одно свойство параметризации методу, можно использовать ParameterCombination
атрибут метода, чтобы задать, как объединены параметры. Среда тестирования вызывает метод для заданных комбинаций.
Эта таблица показывает различные стратегии комбинации параметра.
ParameterCombination Атрибут | Вызов метода |
---|---|
'exhaustive' (значение по умолчанию) | Методы вызываются для всех комбинаций значений параметров. Среда тестирования использует эту комбинацию по умолчанию, если вы не задаете |
'sequential' | Методы вызываются с соответствующими значениями от каждого параметра. Каждый параметр должен содержать то же количество значений. Например, если методу предоставляют два свойства параметризации, и каждое свойство задает три значения параметров, то среда вызывает метод три раза. |
'pairwise' | Методы вызываются для каждой пары значений параметров по крайней мере в один раз. Например, если методу предоставят три свойства параметризации, среда тестирования гарантирует, что метод вызывается для каждой комбинации значений параметров, заданных любыми двумя свойствами. По сравнению с |
Можно объединить параметры при настройке класса, настройке метода, и протестировать уровни. Например, используйте объединенные атрибуты метода TestMethodSetup, ParameterCombination = 'sequential'
задавать последовательную комбинацию параметров уровня настройки метода, заданных в properties
блокируйтесь с MethodSetupParameter
атрибут.
Для примеров того, как объединить тестовые параметры, смотрите, Создают Основной Параметрированный Тест и Создают Усовершенствованный Параметрированный Тест.
Когда вы создаете параметрированный тест, можно переопределить параметры путем введения входных параметров в основанный на классах тест. Чтобы обеспечить данные, которые заданы за пределами тестового файла, создайте Parameter
экземпляр и использование 'ExternalParameter'
опция при создании тестового набора. Для получения дополнительной информации смотрите Использование Внешние Параметры в Параметрированном Тесте.
matlab.unittest.parameters
| matlab.unittest.parameters.Parameter
| matlab.unittest.TestCase