Поделиться через


Тестирование на основе данных на основе легких весов

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

Данные для теста на основе данных на основе легких весов выражаются как набор метаданных (на уровне теста, класса или модуля). Для каждого значения в этом наборе методы тестирования, связанные с настройкой и слезоточивыми методами, будут выполняться для каждого значения в наборе. Давайте рассмотрим, как создать этот код в машинном коде:

1  #include "WexString.h"
2  #include "WexTestClass.h"
3
4  using namespace WEX::Common;
5  using namespace WEX::TestExecution;
6  using namespace WEX::Logging;

7  namespace WEX { namespace TestExecution { namespace Examples
8  {
9      class SimpleDataDrivenExample
10     {
11         TEST_CLASS(SimpleDataDrivenExample);
12         ...
13         BEGIN_TEST_METHOD(SetsOfDataTest)
14             TEST_METHOD_PROPERTY(L"Data:Color", L"{Purple, Maroon, Brown}")
15         END_TEST_METHOD()
16     };

Обратите внимание на значения параметров для TEST_METHOD_PROPERTY в строке 14. Значение метаданных теста начинается с "{" и заканчивается символом "}", указывающим, что указан разделенный запятыми или точкой с запятой список значений. TAEF повторно выполнит метод теста в проблеме, SetOfDataTest() один раз для каждого значения в этом наборе.

Обратите внимание, что имя метаданных начинается с "Data:". Это означает, что набор метаданных действительно задает варианты для параметров теста на основе данных и будет доступен фактическому методу теста, подобно параметрам данных на основе таблицы, например:

11     ...
12
13     void SimpleDataDrivenExample::SetsOfDataTest()
14     {
15         String color;
16         if (SUCCEEDED(TestData::TryGetValue(L"color", color)))
17         {
18             Log::Comment(L"Color retrieved was " + color);
19         }
20     }
21 } /* namespace Examples */ } /* namespace TestExecution */ } /* namespace WEX */

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

1  namespace WEX.Examples
2  {
3      using Microsoft.VisualStudio.TestTools.UnitTesting;
4      using System;
5      using System.Collections;
6      using System.Data;
7      using WEX.Logging.Interop;
8      using WEX.TestExecution;
9
10     [TestClass]
11     public class CSharpDataDrivenSimpleExample
12     {
13         ...
14         [TestMethod]
15         [TestProperty("Data:Color", "{Red, Green, Blue}")]
16         public void SetsOfMetadataTest()
17         {
18             Log.Comment("Color is " + m_testContext.DataRow["Color"]);
19         }
20
21         public TestContext TestContext
22         {
23             get { return m_testContext; }
24             set { m_testContext = value; }
25         }
26
27         private TestContext m_testContext;
28     }
29 }

Как и в случае с тестами на основе таблиц, наборы данных, указанные в качестве метаданных, позволят получить данные через TestContext.DataRow.Обратите внимание, что для хранения легкого веса на основе данных тип параметра всегда будет WEX::Common::String (в машинном коде) и String(в управляемом коде)

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

Кроме того, можно использовать некоторые наборы метаданных (например , наборы метаданных ThreadingModel), а также наборы данных, указанные для того же метода теста. В таком случае комбинаторное расширение всех наборов метаданных и наборов данных будет производиться TAEF, а методы тестирования, вызывающие озабоченность, будут вызываться с каждой комбинацией.

Особые случаи — тест на основе данных с наборами метаданных или данных

Вы можете использовать метод тестирования, зависящий от теста на основе таблиц, а также указать наборы данных или метаданных для него. Например, метод теста может иметь параметры "size" и "color", указанные в тесте на основе таблиц, и хотите, чтобы все строки выполнялись один раз с параметром прозрачности, равным true, а затем присвоено значение false. В таком случае "прозрачность" может быть указана как набор "{true, false}" для теста на основе данных. Важно отметить, что в случае конфликтов параметров в наборе метаданных заданы строки на основе таблиц, тип и значение уровня строки переопределит значение набора метаданных.

Выполнение тестов с помощью наборов данных или метаданных

Выполнение тестов, содержащих наборы данных, является довольно интуитивно понятным. Рассмотрим выходные данные /listproperties для наших примеров тестов:

1   te Examples\CPP.DataDriven.Example.dll /name:*SetsOfDataTest* /listproperties
2
3   Test Authoring and Execution Framework v2.9.3k for x64
4
5           f:\ Examples\CPP.SimpleDataDriven.Example.dll
6               WEX::TestExecution::Examples::SimpleDataDrivenExample<
7                   WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet0
8                           Property[Data:Color] = {Purple, Maroon, Brown}
9
10                          Data[Color] = Purple
11
12                  WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet1
13                          Property[Data:Color] = {Purple, Maroon, Brown}
14
15                          Data[Color] = Maroon
16
17                  WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet2
18                          Property[Data:Color] = {Purple, Maroon, Brown}
19
20                          Data[Color] = Brown

Обратите внимание на строки 7, 12 и 17 в приведенном выше примере. Индекс набора метаданных добавляется к каждому вызову метода теста со значением в наборе данных. Этот индекс имеет форму:

<namespace qualified test method name>#metadataSet<metadataIndex>

Строки 8, 13 и 18 показывают набор метаданных, указанный для этой поддержки тестирования на основе легких данных. В этом случае набор состоит из цветов фиолетового, maroon и коричневого. Строки 10, 15 и 20 показывают фактическое значение из этого набора, активное для текущего вызова теста. В случае SetOfMetadataTest#metadataSet1 второй вызов этого метода, активное значение параметра из набора — Maroon.

Вы можете выбрать значение или имя данных так же, как и в тестах на основе таблиц. Например, можно выбрать SetOfDataTest#metadataSet1, например /select:'Maroon' или /name:@Data:Color=*#metadataSet1

Чтобы получить краткий справочник, выходные данные /listproperties из примера неуместного теста показаны ниже.

te Examples\CSharp.DataDriven.Example.dll /name:*SetsOfMetadataTest* /listproperties

Test Authoring and Execution Framework v2.9.3k for x64

        f:\ Examples\CSharp.DataDrivenSimple.Example.dll
            WEX.Examples.CSharpDataDrivenSimpleExample
                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