Swift Testing #3: @Tag와 함께 테스트 정리, 분류 및 필터링
Source: Dev.to
소개
프로젝트에는 수백 개 또는 수천 개의 테스트와 스위트가 있을 수 있습니다. 이러한 테스트 중 일부는 중요하거나 불안정과 같은 공통 특성을 공유할 수 있습니다. Swift 테스트 라이브러리에는 테스트를 그룹화하고 분류하기 위한 tags 트레이트가 포함되어 있습니다.
태그(Tags)는 테스트 스위트와 다릅니다. 스위트는 코드 수준에서 테스트를 조직하는 반면, 태그는 서로 다른 스위트, 파일 또는 테스트 타깃 간에 공유될 수 있는 의미론적 정보를 추가합니다.
태그는 @Tag 매크로를 사용하여 Tag 확장 안에 정적 변수로 선언된 Tag 인스턴스입니다. 이 선언은 테스트에서 사용할 수 있도록 Tag 확장 내부에 있어야 합니다.
extension Tag {
@Tag static var legallyRequired: Self
}
참고:
Tag선언에서let대신var를 사용하면 Swift 6에서 다음과 같은 경고가 표시됩니다.
Cannot expand accessor macro on variable declared with 'let'; this is an error in the Swift 6 language mode.
테스트에서 태그 사용하기
테스트 설명 뒤에 트레이트 .tags()에 가변 인수 형태로 태그를 전달하면 하나 이상의 태그를 적용할 수 있습니다.
extension Tag {
@Tag static var tag1: Self
@Tag static var tag2: Self
}
@Test("테스트 설명", .tags(.tag1, .tag2))
func prueba() { /* ... */ }
여러 태그를 사용하면 테스트는 동시에 모든 태그 그룹에 속하게 되지만, 한 번만 실행됩니다; 결과는 각 해당 그룹에 표시됩니다.
전체 스위트에 태그 지정하기
Tag는 전체 Suite에 적용될 수도 있으며, 이는 해당 스위트의 모든 테스트가 동일한 태그를 공유한다는 의미입니다.
extension Tag {
@Tag static var tag1: Self
@Tag static var tag2: Self
}
@Suite("FEATURE: 어떤 기능", .tags(.tag1, .tag2))
struct FeatureX {
@Test("테스트 설명 1")
func prueba1() { /* ... */ }
@Test("테스트 설명 2")
func prueba2() { /* ... */ }
}
같은 이름의 태그 네임스페이스
다른 위치에서 같은 이름의 두 태그를 선언하면 Swift는 이를 동일하게 간주합니다. 이를 구분하려면 Tag 안에 네임스페이스를 만들 수 있습니다.
extension Tag {
enum SomeNamespace {}
}
extension Tag.SomeNamespace {
@Tag static var extraSpecial: Tag
}
@Test(
"Extra Special Sauce recipe is secret",
.tags(.SomeNamespace.extraSpecial)
)
func secretSauce() { /* ... */ }
테스트 탐색기

테스트 보고서

태그별 필터링
