안녕하세요.
프로젝트 만들 때 Unit Test 추가하려고 'Include Tests' 체크박스 체크한 적 있으시죠?
그럼 아래처럼 Test 파일이 생성될 건데, 하나 특이한 점은 import 앞에 @testable 이란 것이 붙었어요.
이번엔 @testable이 뭔지에 대해서 간단하게 알아볼게요.
# @testable 이란?
Swift Access Control에 의해 internal 레벨 이하로 설정되어 있으면 앱이나 프레임워크 외부에서 접근이 어렵습니다.
(open이 가장 높고 private이 가장 낮아요!)
즉, 테스트 코드에서 internal 레벨 코드를 테스트하려면 internal 레벨을 public 이상으로 올려줘야 할 텐데 이건 말이 안 되겠죠??
이때 import 앞에 @testable 속성을 적용하면 Access Level을 변경하지 않고 내부 코드를 테스트할 수 있게 됩니다.
[참고]
internal 또는 public으로 선언된 Class나 Class 멤버 변수는 테스트 코드에선 open 레벨로 설정됩니다.
그 외에 internal로 설정된 것들은 테스트 코드에선 public 레벨로 설정됩니다.
[주의] @testable을 사용하면 internal 까지만 접근이 가능합니다.
file-private, private은 @testable을 사용해도 접근할 수 없습니다.
# 사용방법
(1) 'Xcode > Build Settings > Enable Testability'를 YES로 설정.
(2) import 앞에 @testable 속성 추가
# 예시
foo라는 internal 함수를 가지고 있는 MyClass라는 internal 클래스를 정의했어요.
@testable을 속성을 적용하면 internal 함수인 foo 함수도 테스트할 수 있습니다.
그리고 테스트 코드 안에선 MyClass는 open으로 설정되어 있기 때문에 아래처럼 상속과 override도 가능합니다.
추가로 fileprivate과 private 레벨은 @testable을 사용해도 접근할 수 없고 에러가 발생하니 주의해 주세요!
# 참고
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/attributes/#testable
이번 글은 여기서 마무리.
'Swift' 카테고리의 다른 글
private(set) (0) | 2024.01.17 |
---|---|
@available (0) | 2023.12.05 |
Dictionary Enum.rawValue subscript (0) | 2023.08.08 |
Opaque and Boxed Types (0) | 2023.07.01 |
Thread.sleep vs Task.sleep (0) | 2023.06.01 |