Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описывается несколько примеров тестирования на основе данных и рассматриваются конкретные функции в каждом примере.
Первый пример — это базовый тест на основе данных с именем SimpleDataDrivenExample.
В управляемом примере вы найдете XML-файл, который выглядит следующим образом:
1 <?xml version="1.0"?>
2 <Data>
3 <Table Id="Table1">
4 <ParameterTypes>
5 <ParameterType Name="Size">Int32</ParameterType>
6 <ParameterType Name="Color">String</ParameterType>
7 </ParameterTypes>
8 <Row>
9 <Parameter Name="Size">4</Parameter>
10 <Parameter Name="Color">White</Parameter>
11 </Row>
12 <Row>
13 <Parameter Name="Size">10</Parameter>
14 <Parameter Name="Color">Black</Parameter>
15 </Row>
16 <Row>
17 <Parameter Name="Size">9</Parameter>
18 <Parameter Name="Color">Orange</Parameter>
19 </Row>
20 <Row>
21 <Parameter Name="Size">9</Parameter>
22 <Parameter Name="Color">Blue</Parameter>
23 </Row>
24 </Table>
25 </Data>
Этот XML-файл определяет параметры данных для использования в тестах, управляемых данными. Верхний XML-узел — это тег data>, который может содержать один или несколько тегов таблиц, определенных в нем.<>< Каждая таблица должна быть связана с уникальным атрибутом ID. Тестовые функции используют значение идентификатора таблицы для идентификации конкретной таблицы, которую они будут использовать в XML-файле.
В теге <таблицы> есть дополнительный <раздел ParameterTypes> . Здесь можно явно указать тип данных для заданного параметра с помощью <тегов ParameterTypes> . В приведенном выше примере вы явно укажите, что параметр Size имеет тип Int32, а параметр Color — строка. Для сводки: раздел ParameterTypes является необязательным. По умолчанию, если сведения о типе параметра не указаны, он будет сохранен в виде строки.
При сравнении примеров Managed и Native вы заметите, что единственное различие между ними — блок <ParameterTypes>. Исходный XML-файл указывает, что Размер имеет собственный целочисленный тип "int" и использует тип по умолчанию WEX::Common::String в качестве типа для Цвета, не указывая его явно. Для удобства в следующем примере показан XML-файл из собственного примера.
1 <?xml version="1.0"?>
2 <Data>
3 <Table Id="SimpleTable">
4 <ParameterTypes>
5 <ParameterType Name="Size">int</ParameterType>
6 </ParameterTypes>
7 <Row>
8 <Parameter Name="Size">4</Parameter>
9 <Parameter Name="Color">White</Parameter>
10 </Row>
11 <Row>
12 <Parameter Name="Size">10</Parameter>
13 <Parameter Name="Color">Black</Parameter>
14 </Row>
15 <Row>
16 <Parameter Name="Size">9</Parameter>
17 <Parameter Name="Color">Orange</Parameter>
18 </Row>
19 <Row>
20 <Parameter Name="Size">9</Parameter>
21 <Parameter Name="Color">Blue</Parameter>
22 </Row>
23 </Table>
24 </Data>
Типы параметров, поддерживаемые в машинном и управляемом коде, перечислены в типах параметров в таблицах источников данных.
Если указан любой другой тип данных, тест вызовет предупреждение и считает его строкой.
Возвращаясь к XML-файлам после блока <ParameterTypes> в XML-файлах, у вас есть одинаковый набор <строк>, каждая из которых соответствует одному набору данных в наших управляемых и нативных примерах. В этом случае у вас есть 4 набора данных, определенных по 4 <блокам строк> , каждый из которых задает значения параметров с помощью <тегов параметров> .
Это охватывает основные основы различных частей файла источника данных. Теперь давайте посмотрим, как получить значения, указанные в приведенном выше XML-файле.
Создание теста на основе данных
Теперь, когда данные указаны, необходимо связать код или метод теста, который будет использовать данные с данными в XML-файле. Это можно сделать как в управляемых, так и собственных примерах, указав метаданные DataSource . Метаданные DataSource состоит из трех частей:
- Table:— это определяет источник данных как xml-таблицу.
- "DataDrivenTests.xml" — это файл, содержащий xml-таблицу.
- "#Table2" — после делиметра "#" значение Table2 определяет определенную таблицу в XML-документе для использования. Один источник данных таблицы XML может содержать несколько таблиц. TAEF будет просматривать XML-файл для элемента Table с атрибутом Id, который соответствует указанному значению.
Еще раз давайте рассмотрим код, охватывающий описанные выше аспекты.
Нативный код
1 class SimpleDataDrivenExample
2 {
3 BEGIN_TEST_CLASS(SimpleDataDrivenExample)
4 TEST_CLASS_PROPERTY(L"Description", L"Simple example in table-based data-driven tests")
5 END_TEST_CLASS()
6
7 TEST_METHOD_CLEANUP(TestCleanup);
8 TEST_METHOD_SETUP(TestSetup);
9
10 BEGIN_TEST_METHOD(DataDrivenTest)
11 TEST_METHOD_PROPERTY(L"DataSource", L"Table:SimpleDataDrivenExample.xml#SimpleTable")
11 END_TEST_METHOD()
12 ...
Управляемый код
1 [TestMethod]
2 [DataSource("Table:CSharpDataDrivenSimpleExample.xml#SimpleTable")]
3 public void DataDrivenTest()
4 {
5 ...
6 }
DataSource — это известное свойство в Microsoft.VisualStudio.TestTools.UnitTesting.
Помимо приведенного выше, вам потребуется несколько дополнительных шагов для тестов на основе данных в управляемом коде. Кроме того, необходимо определить частное свойство TestContext. Дополнительные сведения см. в разделе TestContext Class. Вы также определяете доступы к этому свойству для публичных оценщиков. В системе TAEF это свойство TestContext устанавливается таким образом, чтобы вы могли получить доступ к данным через него. Давайте рассмотрим эту часть кода:
1 public TestContext TestContext
2 {
3 get;
4 set;
5 }
Получение данных в методе Test
API извлечения отличаются в управляемом и нативном коде. Начнем с понимания собственного API извлечения:
1 void SimpleDataDrivenExample::DataDrivenTest()
2 {
3 int size;
4 if (SUCCEEDED(TestData::TryGetValue(L"size", size)))
5 {
6 VERIFY_ARE_NOT_EQUAL(size, 0);
7 Log::Comment(String().Format(L"Size retrieved was %d", size));
8 }
9
10 String color;
11 if (SUCCEEDED(TestData::TryGetValue(L"color", color)))
12 {
13 Log::Comment(L"Size retrieved was " + color);
14 }
15
16 unsigned int index;
17 if (SUCCEEDED(TestData::TryGetValue(L"index", index)))
18 {
19 Log::Comment(String().Format(L"At index %d", index));
20 }
21 }
Обратите особое внимание на линии 4, 11 и 17. Перед каждой из этих строк определите локальную переменную, чтобы сохранить полученные данные. Важно правильно определить тип. Поскольку вы определили "Size" как тип "int" в XML-файле, необходимо определить локальную переменную типа int для извлечения этого значения. API извлечения принимает название параметра в виде строки в качестве первого параметра. Второй параметр — это локальная переменная, переданная по ссылке и заданная кодом TAEF.
Этот API извлечения определяется в TestData.h и включается в заголовок WexTestClass.h, который включают все тесты TAEF.
Чтобы получить данные в управляемом коде, используйте определенное свойство TestContext. Ознакомьтесь с приведенным ниже кодом (или в примере):
1 public void DataDrivenTest()
2 {
3 int size = (int)m_testContext.DataRow["Size"];
4 Verify.AreNotEqual(size, 0);
5 Log.Comment("Size is " + size.ToString());
6
7 Log.Comment("Color is " + m_testContext.DataRow["Color"]);
8 UInt32 index = (UInt32)m_testContext.DataRow["Index"];
9 Log.Comment("At index " + index.ToString());
10 }
Если вы знакомы с VSTS, вы увидите, что приведенный выше пример аналогичен. Используйте DataRow и укажите имя столбца в качестве имени параметра, который вы пытаетесь извлечь.
Если вы посмотрите в пример, там также есть тест, не основанный на данных, в том же классе. Другими словами, у вас есть гибкость объединения тестов DataDriven и NonDataDriven в одном и том же тестовом классе.
Выполнение SimpleDataDrivenExample с помощью TAEF
Убедитесь, что вы знаете, как создавать управляемые данными тесты и как выполнять тесты с помощью TAEF перед началом работы с советами и рекомендациями по выполнению DataDrivenTests с помощью TAEF. Полезно освежить память о том, как Selection работает с TAEF.
Командная строка для выполнения тестов на основе данных не отличается от выполнения универсального теста с помощью TAEF. Чтобы запустить оба примера (собственные и управляемые), описанные выше, просто выполните следующую команду:
TE.exe примеры\CPP.DataDriven.Example.dll Examples\CSharp.DataDriven.Example.dll /name:*Простой*
Параметр "/name" добавляет критерии выбора на основе имени и выбирает только интересующие вас классы. Чтобы выбрать тесты для выполнения из классов, необходимо сначала перечислить все свойства библиотеки DLL. Затем можно решить, какие свойства следует использовать для критериев выбора.
TE.exe Examples\CPP.DataDriven.Example.dll Examples\CSharp.DataDriven.Example.dll /name:*Simple* /listproperties
f:\Examples\CPP.DataDriven.Example.dll
WEX::TestExecution::Examples::SimpleDataDrivenExample
Property[Description] = Simple example in table-based data-driven tests
WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#0
Setup: TestSetup
Teardown: TestCleanup
Property[DataSource] = Table:SimpleDataDrivenExample.xml#SimpleTable
Data[Color] = White
Data[Size] = 4
WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#1
Setup: TestSetup
Teardown: TestCleanup
Property[DataSource] = Table:SimpleDataDrivenExample.xml#SimpleTable
Data[Color] = Black
Data[Size] = 10
WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#2
Setup: TestSetup
Teardown: TestCleanup
Property[DataSource] = Table:SimpleDataDrivenExample.xml#SimpleTable
Data[Color] = Orange
Data[Size] = 9
WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#3
Setup: TestSetup
Teardown: TestCleanup
Property[DataSource] = Table:SimpleDataDrivenExample.xml#SimpleTable
Data[Color] = Blue
Data[Size] = 9
WEX::TestExecution::Examples::SimpleDataDrivenExample::FirstNonDataDrivenTest
Setup: TestSetup
Teardown: TestCleanup
WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet0
Setup: TestSetup
Teardown: TestCleanup
Property[Data:Color] = {Purple, Maroon, Brown}
Data[Color] = Purple
WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet1
Setup: TestSetup
Teardown: TestCleanup
Property[Data:Color] = {Purple, Maroon, Brown}
Data[Color] = Maroon
WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet2
Setup: TestSetup
Teardown: TestCleanup
Property[Data:Color] = {Purple, Maroon, Brown}
Data[Color] = Brown
WEX::TestExecution::Examples::SimpleDataDrivenExample::SecondNonDataDrivenTest
Setup: TestSetup
Teardown: TestCleanup
f:\Examples\CSharp.DataDriven.Example.dll
WEX.Examples.CSharpDataDrivenSimpleExample
Setup: MyClassInitialize
Property[Description] = Simple example in table-based data-driven tests
WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#0
Property[DataSource] = Table:CSharpDataDrivenSimpleExample.xml#SimpleTable
Data[Color] = White
Data[Size] = 4
WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#1
Property[DataSource] = Table:CSharpDataDrivenSimpleExample.xml#SimpleTable
Data[Color] = Black
Data[Size] = 10
WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#2
Property[DataSource] = Table:CSharpDataDrivenSimpleExample.xml#SimpleTable
Data[Color] = Orange
Data[Size] = 9
WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#3
Property[DataSource] = Table:CSharpDataDrivenSimpleExample.xml#SimpleTable
Data[Color] = Blue
Data[Size] = 9
WEX.Examples.CSharpDataDrivenSimpleExample.NonDataDrivenTest
WEX.Examples.CSharpDataDrivenSimpleExample.SetsOfMetadataTest#metadataSet0
Property[Data:Color] = {Red, Green, Blue}
Data[Color] = Red
WEX.Examples.CSharpDataDrivenSimpleExample.SetsOfMetadataTest#metadataSet1
Property[Data:Color] = {Red, Green, Blue}
Data[Color] = Green
WEX.Examples.CSharpDataDrivenSimpleExample.SetsOfMetadataTest#metadataSet2
Property[Data:Color] = {Red, Green, Blue}
Data[Color] = Blue
Теперь давайте оставим без внимания перечисленные выше наборы SetsOfMetadataTest и SetsOfDataTest. Если вам интересно об этом, прочитайте больше о легковесном тестировании на основе данных. Теперь, когда вы знаете различные свойства и имя параметра данных и значения, можно выбрать определенные тесты на основе этого. Попробуйте их и следуйте инструкциям, чтобы подтвердить то, что вы выбрали.
Чтобы запустить только не управляемые данными тесты, выполните следующую команду:
TE.exe Примеры\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll /select:"@Name='*Simple*' And not(@DataSource=*)"
Теперь, чтобы запустить только те тесты, управляемые данными, где цвет указан как черный, выполните следующую команду:
TE.exe примеры\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll /select:"@Name='*Simple*" и @Data:Color="Black"
Как и в случае с параметром Color, @Data:<DataDrivenParameterName>=<DataDrivenParameterValue> будет выполнять определенные данные на основе указанного значения параметра DataDriven. В приведенном выше случае он будет запускать WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#1 и WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#1
Обратите внимание на индексы тестов в приведенном выше списке. Вы также можете выбрать указанные выше параметры на основе индекса.
TE.exe Примеры\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll /select:"@Name='*Simple*' And @Data:Index=1"
Выше будет выполнено два теста, которые выбрал @Data:Color="Black". Вы даже добавляете условия в процесс выбора индекса @Data:Index > lowerGuardValue и @Data:index< upperGuardValue
Если вы понимаете основы тестирования на основе данных с помощью TAEF, следуйте следующим классам в том же примере: переопределение метаданных на уровне строк, указание типов параметров массива.