Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Несколько источников данных полезны при поиске комбинаторного расширения одного или нескольких источников данных (табличного источника данных, источника данных на основе PICT или источника данных на основе WMI).
Разработка тестового дизайна для эффективного использования этой функции является крайне важной. Давайте посмотрим на пример, почему это так. Предположим, в составе нескольких источников данных вы хотите указать два источника данных на основе таблиц, один источник данных на основе WMI и один источник данных на основе 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 указаны два источника данных. Первая таблица содержит 3 строки, а вторая таблица содержит 4 строки. Поэтому метод теста будет вызываться 12 раз (3 X 4).
Ограничения, которые применяются при указании нескольких источников данных
Ограничения применимы только в том случае, если требуется указать источник данных на основе таблицы в нескольких спецификациях DataSource. Таблица DataSource должна быть указана как таблица:<относительный путь к XML-файлу>#<TableId>. Если TAEF обнаруживает, что "TableId" предоставляется в виде отдельных метаданных, предполагается, что DataSource является единственным источником данных на основе таблицы, и осуществляется дальнейшая обработка.