元数据覆盖数据驱动的测试示例
本部分通过示例介绍数据驱动测试的一些高级功能。 如果仍在介绍基础知识,则可能需要从 简单的数据驱动示例开始。
引用的示例:
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::D ataDrivenTest#0
- WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::D ataDrivenTest#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