条件元数据

有时,根据运行时值更改元数据值会很有用。 条件元数据允许模块、类或方法元数据仅在基于 运行时参数的某些条件下应用。

语法

若要使元数据成为条件,请在元数据名称后面添加一个用方括号括起来的条件。 条件必须采用 选择查询语言的格式。 变量的值来自 运行时参数

例如,假设测试具有以下元数据:

TEST_METHOD_PROPERTY(L"RunAs", L"Elevated")
TEST_METHOD_PROPERTY(L"Ignore[@NoElevation=true]", L"true")

然后,当 TAEF 加载 DLL 时,它将根据运行时参数评估“@NoElevation=true”条件。 因此,如果用户将“NoElevation”运行时参数设置为 true,则测试将应用名为“Ignore”和值“true”的元数据。

如果多个条件元数据出现在一个测试中,则以相同的方式单独计算每个条件元数据。 如果希望测试识别运行时参数的多个可能值,这非常有用。

TEST_METHOD_PROPERTY(L"Data:MyTestData[@TestCaseLevel='Low']", L"{ Datum1, Datum2, Datum3 }")
TEST_METHOD_PROPERTY(L"DataSource[@TestCaseLevel='High']", L"Pict:FullDataSet.model?Order=3")

如果测试具有上面所示的元数据,并且用户将 TestCaseLevel 设置为 Low,则由于 轻量级数据源,该测试将仅被调用三次。 如果用户将 TestCaseLevel 设置为 High, PICT 数据源 将用于为测试生成更多参数。 如果 TestCaseLevel 未设置为“高”或“低”,则不会添加元数据。

默认值

如果仅当该特定元数据名称没有其他条件的计算结果为 true 时,才希望添加元数据,则可以在元数据名称后面追加 [default]

TEST_METHOD_PROPERTY(L"DataSource", L"Pict:MyTest.model")
TEST_METHOD_PROPERTY(L"Pict:Order[@TestCaseLevel='Low']", L"1")
TEST_METHOD_PROPERTY(L"Pict:Order[default]", L"2")
TEST_METHOD_PROPERTY(L"Pict:Order[@TestCaseLevel='High']", L"3")

如果测试具有上述元数据,并且用户未将 TestCaseLevel 设置为 Low 或 High,则 Pict:Order 将设置为 2。 如果用户将 TestCaseLevel 设置为 Low 或 High,则 Pict:Order 将分别设置为 1 或 3。 值 2 将不适用,因为 Pict:Order 的该测试中至少有一个条件的计算结果为 true。

如果需要,请注意不要离开 [默认值]。

TEST_METHOD_PROPERTY(L"DataSource", L"Pict:MyTest.model")
TEST_METHOD_PROPERTY(L"Pict:Order[@TestCaseLevel='Low']", L"1")
TEST_METHOD_PROPERTY(L"Pict:Order", L"2") // This should have [default]
TEST_METHOD_PROPERTY(L"Pict:Order[@TestCaseLevel='High']", L"3")

如果 TestCaseLevel 设置为 Low,则上述元数据集等效于以下元数据集:

TEST_METHOD_PROPERTY(L"DataSource", L"Pict:MyTest.model")
TEST_METHOD_PROPERTY(L"Pict:Order", L"1")
TEST_METHOD_PROPERTY(L"Pict:Order", L"2")

在这种情况下,对于 PICT 订单,未指定 PICT 数据源是使用“1”还是“2”。