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


Несколько источников данных

Несколько источников данных полезны при поиске комбинаторного расширения одного или нескольких источников Данных (табличного источника данных, источника данных на основе PICT или WMI на основе DataSource).

Создание тестового проектирования для эффективного использования этой функции является основным. Давайте посмотрим на пример, почему это так. Предположим, как часть нескольких источников данных, необходимо указать два источника данных на основе таблиц, один WMI dataSource и один источник данных на основе PICT. Для аргумента предположим, что первая таблица содержит 4 строки, вторая имеет 5 строк, запрос WMI возвращает 2 результата, а источник данных PICT создал 6 парных сочетаний. TAEF создаст комбинаторное расширение этих наборов параметров. Это означает, что тестовый метод в вопросе будет вызываться (4 X 5 X 2 X 6 =) 240 раз! Увеличение числа вызовов метода теста с различными сочетаниями параметров может привести к снижению результатов до того, как идет покрытие теста. Это делает важной для разработки теста с помощью нескольких источников данных с осторожностью и путем взвешивания других альтернатив. Ниже приведены некоторые моменты, которые вы можете рассмотреть.

  • Убедитесь, что он добавляет значение для нескольких таблиц. Если вам не нужно, чтобы они были разделены, вы можете придумать эффективное сочетание параметров самостоятельно.
  • Проверьте, можно ли использовать файл модели PICT с ограничениями вместо нескольких таблиц.
  • Проверьте, имеет ли значение рефакторинг тестового случая в несколько тестов и связывание подмножеств из нескольких источников Данных с каждым созданным вложенным тестом.

Указание нескольких источников данных

Ключевым аспектом здесь является указание источника данных. Давайте рассмотрим фрагмент кода из наших собственных и управляемых примеров.

Родной

1   namespace WEX { namespace TestExecution { namespace Examples
2   {
3       class AdvancedDataDrivenTests
4       {
5           TEST_METHOD_SETUP(DataDrivenSetup);
6           TEST_METHOD_CLEANUP(DataDrivenCleanup);
7
8           TEST_CLASS(AdvancedDataDrivenTests)
9
10          BEGIN_TEST_METHOD(SecondTable)
11              TEST_METHOD_PROPERTY(L"DataSource", L"Table:AdvancedDataDrivenTests.xml#Table2;Table:CppTestLevelDataSource.xml#NestedTable")
12          END_TEST_METHOD()
13
14          BEGIN_TEST_METHOD(FirstTable)
15              TEST_METHOD_PROPERTY(L"DataSource", L"Table:AdvancedDataDrivenTests.xml#Table1;"
16                  L"PICT:PictDataSource.txt;" L"WMI:SELECT Location FROM Win32_StartupCommand")
17          END_TEST_METHOD()
18      };
19  } /* namespace Examples */ } /* namespace TestExecution */ } /* namespace WEX */

См. строки 11, 15 и 16 в приведенном выше примере. Как правило, шаблон для указания DataSource — это разделенный точкой с запятой список каждой спецификации DataSource. Спецификация будет выглядеть очень похоже в управляемом коде, а также.

Управляемых

[TestMethod]
[DataSource(@"Table:CSharpAdvancedDataDrivenTests.xml#FirstTable;
    WMI:SELECT ProcessId FROM Win32_Service WHERE Name='Themes'")]

public void First()
{
    Log.Comment("In CSharpAdvancedDataDrivenTests.First");
    String[] shapes = m_testContext.DataRow["Shape"] as String[];
    foreach (String shape in shapes)
    {
        Console.WriteLine("The shape is " + shape);
    }

    Int32[] lengths = m_testContext.DataRow["Length"] as Int32[];
    foreach (int length in lengths)
    {
        Console.WriteLine("The length is " + length.ToString());
    }

    String description = (String)m_testContext.DataRow["Description"];
    Boolean desktopInteract = (Boolean)m_testContext.DataRow["DesktopInteract"];
    UInt32 processId = (UInt32)m_testContext.DataRow["ProcessId"];
    Log.Comment("Themes service is running on process " + processId.ToString());
    Log.Comment("Themes service description: " + description);
}

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

Указание DataSource в одной строке

[DataSource("Table:CSharpAdvancedDataDrivenTests.xml#FirstTable;WMI:SELECT ProcessId FROM Win32_Service WHERE Name='Themes'")]

Просто для повторного итерации : метод теста будет выполняться один раз для каждого n-пути комбинаторного расширения наборов данных, созданных каждым отдельным источником Данных. Например, в приведенном выше управляемом примере безопасно предполагается, что запущена только одна служба тем, и зная, что в источнике данных таблицы есть 3 строки, метод теста будет вызываться 3 раза (1 X 3). В собственном примере в методе тестирования SecondTable указано две таблицы DataSources. Первая таблица содержит 3 строки, а вторая таблица содержит 4 строки. Поэтому метод теста будет вызываться 12 раз (3 X 4).

Ограничения, которые применяются при указании нескольких источников данных

Ограничения применимы только в том случае, если требуется указать источник данных на основе таблицы в нескольких спецификациях DataSource. Таблица DataSource должна быть указана как таблица:<относительный путь к XML-файлу>#<TableId>. Если TAEF обнаруживает, что tableId предоставляется в виде отдельных метаданных, предполагается, что DataSource является одним источником данных на основе таблиц и продолжается.