Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Várias DataSources são úteis quando você está procurando uma expansão combinatória de uma ou mais DataSources (DataSource baseada em tabela, DataSource baseada em PICT ou DataSource baseada em WMI).
Elaborar seu design de teste para fazer uso eficiente desse recurso é fundamental. Vamos ver, com a ajuda de um exemplo, por que isso acontece. Digamos que, como parte de várias DataSource, você deseja especificar duas DataSources baseadas em tabela, uma DataSource baseada em WMI e uma DataSource baseada em PICT. Por uma questão de argumentação, digamos que a primeira tabela tem 4 linhas, a segunda tem 5 linhas, a consulta WMI retorna 2 resultados e a DataSource PICT gerou 6 combinações pareadas. O TAEF apresentará uma expansão combinatória destes conjuntos de parâmetros. Isto significa que o método de teste em questão será invocado (4 X 5 X 2 X 6 =) 240 vezes! O aumento do número de invocações do método de ensaio com combinações variáveis de parâmetros pode produzir resultados decrescentes no que diz respeito à cobertura do ensaio. Isso torna importante projetar o teste usando várias DataSources com cuidado e ponderando outras alternativas. A seguir estão alguns pontos que você pode querer considerar:
- Certifique-se de que agrega valor ter várias tabelas. Se você não precisa que eles sejam separados, você mesmo pode criar uma combinação eficiente de parâmetros.
- Verifique se você pode usar um arquivo de modelo PICT com restrições, em vez de várias tabelas.
- Verifique se há valor em refatorar seu caso de teste em vários testes e associar subconjuntos de várias DataSources a cada subteste recém-criado.
Especificar várias fontes de dados
O aspeto principal aqui é como especificar o DataSource. Vamos dar uma olhada no trecho de código de nossos exemplos nativos e gerenciados.
Nativo
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 */
Veja as linhas 11, 15 e 16 no exemplo acima. Em geral, o padrão a seguir para especificar o DataSource é uma lista de especificações do DataSource separadas por ponto-e-vírgula. A especificação seria muito semelhante no código gerenciado também.
Gerenciado
[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);
}
Os exemplos também demonstram as maneiras de especificar várias DataSources em várias linhas. É claro que você poderia ter especificado o DataSource em uma única linha (como mostrado abaixo), mas poderia melhorar significativamente a legibilidade usando as construções mostradas acima.
Especificando DataSource em uma única linha
[DataSource("Table:CSharpAdvancedDataDrivenTests.xml#FirstTable;WMI:SELECT ProcessId FROM Win32_Service WHERE Name='Themes'")]
Apenas para repetir: o método de teste será executado uma vez para cada expansão combinatória n-way de conjuntos de dados gerados por cada DataSource individual. Por exemplo, para o exemplo gerenciado acima, assumindo com segurança que há apenas um serviço Temas em execução e sabendo que há 3 Linhas na fonte de dados da tabela fornecida, o método de teste será invocado 3 vezes (1 X 3). No caso de exemplo nativo, no método de teste SecondTable, há duas tabelas DataSources especificadas. A primeira tabela contém 3 linhas e a segunda tabela contém 4 linhas. Assim, o método de teste será invocado 12 vezes (3 X 4).
Restrições que se aplicam ao especificar várias fontes de dados
As restrições são aplicáveis somente quando você deseja especificar uma DataSource baseada em tabela nas várias especificações DataSource. Table DataSource deve ser especificado como Table:<relative path to XML file>#<TableId>. Se o TAEF descobrir que "TableId" é fornecido como um metadados separado, ele assumirá que o DataSource é um único DataSource baseado em tabela e continuará.