本部分介绍通过示例进行数据驱动测试的一些高级功能。 如果仍在介绍基础知识,可能需要从 简单数据驱动示例开始。
引用的示例:
MetadataOverridingDataDrivenExample
DataDrivenMetadataOverridingExample
如果将本节中涵盖的示例与 简单数据驱动示例 页中涵盖的示例进行比较,你会注意到唯一的区别在于测试中的各个级别的元数据和属性已添加。 让我们先看看如何编写基本测试。
在本机示例中,在下面的代码示例中观察第 5 行和第 10 行:
1 class MetadataOverridingDataDrivenExample
2 {
3 BEGIN_TEST_CLASS(MetadataOverridingDataDrivenExample)
4 ...
5 TEST_CLASS_PROPERTY(L"Priority", L"2")
6 END_TEST_CLASS()
7
8 BEGIN_TEST_METHOD(DataDrivenTest)
9 ...
10 TEST_METHOD_PROPERTY(L"Owner", L"wex")
11 END_TEST_METHOD()
12 }
因此,类“MetadataOverridingDataDrivenExample”中定义的所有测试的优先级为 2。 请记住,测试可以覆盖在类或模块等上级中指定的任何元数据。 在这种情况下,DataDrivenTest 方法仍保留 2 的优先级,其“所有者”定义为“WEX”。 现在,如果这是非数据驱动测试,可以选择“/select:@Priority=2”或“/select:@Owner='WEX'”任一选项,并在其中执行测试方法。 但是 ,使用数据驱动测试,可以通过在“行”级别指定元数据来进一步替代在测试方法级别适用的属性。
让我们看看 XML 文件以了解作方法。
1 <?xml version="1.0"?>
2 <Data>
3 <Table Id="MetadataTable">
4 <ParameterTypes>
5 <ParameterType Name="Size">int</ParameterType>
6 </ParameterTypes>
7 <Row Priority="1">
8 <Parameter Name="Size">4</Parameter>
9 <Parameter Name="Color">White</Parameter>
10 </Row>
11 <Row Owner="C2">
12 <Parameter Name="Size">10</Parameter>
13 <Parameter Name="Color">Black</Parameter>
14 </Row>
15 <Row Priority="1" Owner="C3">
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>
在前 3 行中,该示例通过显式指定特定数据值的元数据来替代某些元数据。 但最后一组数据与包含它的方法具有相同的元数据:Priority=2 和 Owner=WEX。
让我们先看看托管代码,然后再查看这些测试的选择和执行。
1 [TestClass]
2 public class DataDrivenMetadataOverridingExample
3 {
4 [ClassInitialize]
5 [Priority(2)]
6 public static void MyClassInitialize(Object testContext)
7 {
8 }
9
9 [TestMethod]
10 ...
11 [TestProperty("Owner", "WEX")]
12 public void DataDrivenTest()
13 {
14 ...
15 }
...
你也会在这里完全模仿本机示例中的属性。
现在,让我们更好地理解覆盖:
TE.exe Examples\CSharp.DataDriven.Example.dll /select:"@Name='*overriding*' and @Priority=1"
将运行
- WEX。Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#0
- WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#2
TE.exe Examples\CPP.DataDriven.Example.dll /select:"@Name='*overriding*' and @Priority=1"
将运行:
- WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#0
- WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#2
读者练习
作为练习,请尝试添加新的元数据值。 仅改变上述示例中的选择条件,
/select:"@Name='*overriding*' and @Owner='WEX'"
将在托管和本机示例中分别运行索引 #0 和 #3 的数据驱动测试。
/select:"@Name='*overriding*' and @Priority=2"
将使用索引 #1 和 #3 运行数据驱动测试,并在托管示例中运行 NonDataDrivenTest
TE.exe Examples\CPP.DataDriven.Example.dll Examples\CSharp.DataDriven.Example.dll /name:*overriding* /listproperties
F:\ Examples\CPP.DataDriven.Example.dll
WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample
Property[Priority] = 2
WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#0
Property[Owner] = WEX
Property[Priority] = 1
Property[DataSource] = Table:MetadataOverridingDataDrivenExample.xml#MetadataTable
Data[Color] = White
Data[Size] = 4
WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#1
Property[Owner] = C2
Property[DataSource] = Table:MetadataOverridingDataDrivenExample.xml#MetadataTable
Data[Color] = Black
Data[Size] = 10
WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#2
Property[Owner] = C3
Property[Priority] = 1
Property[DataSource] = Table:MetadataOverridingDataDrivenExample.xml#MetadataTable
Data[Color] = Orange
Data[Size] = 9
WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#3
Property[Owner] = WEX
Property[DataSource] = Table:MetadataOverridingDataDrivenExample.xml#MetadataTable
Data[Color] = Blue
Data[Size] = 9
F:\ Examples\CSharp.DataDriven.Example.dll
WEX.Examples.DataDrivenMetadataOverridingExample
Setup: MyClassInitialize
Property[Priority] = 2
WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#0
Property[DataSource] = Table:CSharpDataDrivenMetadataOverridingExample.xml#MetadataTable
Property[Owner] = WEX
Property[Priority] = 1
Data[Color] = White
Data[Size] = 4
WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#1
Property[DataSource] = Table:CSharpDataDrivenMetadataOverridingExample.xml#MetadataTable
Property[Owner] = C2
Data[Color] = Black
Data[Size] = 10
WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#2
Property[DataSource] = Table:CSharpDataDrivenMetadataOverridingExample.xml#MetadataTable
Property[Owner] = C3
Property[Priority] = 1
Data[Color] = Orange
Data[Size] = 9
WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#3
Property[DataSource] = Table:CSharpDataDrivenMetadataOverridingExample.xml#MetadataTable
Property[Owner] = WEX
Data[Color] = Blue
Data[Size] = 9
WEX.Examples.DataDrivenMetadataOverridingExample.NonDataDrivenTest