다음을 통해 공유


조건부 메타데이터

경우에 따라 런타임 값에 따라 메타데이터 값이 변경되는 것이 유용합니다. 조건부 메타데이터를 사용하면 모듈, 클래스 또는 메서드 메타데이터를 런타임 매개 변수에 따라 특정 조건에서만 적용할 수 있습니다.

구문

메타데이터를 조건부로 만들려면 메타데이터 이름 다음에 대괄호로 둘러싸인 조건을 추가합니다. 조건은 선택 쿼리 언어 형식이어야 합니다. 변수의 값은 런타임 매개 변수에서 가져옵니다.

예를 들어 테스트에 다음과 같은 메타데이터가 있다고 가정합니다.

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로 평가되지 않은 경우에만 메타데이터를 추가하려는 경우 [기본값]을 사용하여 메타데이터 이름을 추가할 수 있습니다.

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으로 설정됩니다. Pict:Order에 대한 해당 테스트의 조건이 true로 평가되었으므로 값 2가 적용되지 않습니다.

필요한 경우 [기본값]을 벗어나지 않도록 주의하세요.

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"를 사용할지 여부는 지정되지 않습니다.