당연히 이렇게 되면 해당 모듈을 public 으로 선언해야 하는데 테스트 때문에 public 으로 풀어야 한다는 건 이상하다, 아니 문제가 있다. 애플에서도 이걸 느꼈는지 Swift 2.0대와 Xcode 7에 들어서는 이걸 수정하였다.
참고로 이 글은 Xcode 7 Beta1 을 기준으로 쓰여졌다. 상황에 따라 내용이 업데이트 될 수도 있다.
testable
Swift 2.0 에 들어서 새로 추가된 명령어로 '@testable
'이 있다. 테스트 타겟에서 internal 모듈을 임포트 할 수 있도록 도와주는 키워드라고 생각하자. 아래와 같은 식으로 사용 할 수 있다.
@testable import ModuleProjectName기존과 비슷하긴 한데 앞쪽에 @testable 이 붙는 것이 좀 다르다.
Xcode 7 Beta1에서 실제로 테스트 해 본 스크린샷을 보자.
TestApp 이라는 프로젝트를 만들고 여기다 MyClass.swift 파일을 추가해서 MyClass 라는 internal class를 추가하였다. 참고로, 별 다른 액세스 컨트롤 지시어가 없으면 internal 이라는 점을 잊지 말자. 위의 코드에는 이 엑세스 컨트롤 지시어가 없기 때문에 자동으로 internal 이 된다.
이제 테스트 타겟의 테스트 파일을 보자. 상단에 testable을 이용해 import를 하는 코드와, MyClass의 인스턴스를 이용해 테스트를 하는 단순한 코드를 구현하였다.
이렇게 코딩을 하면 앞서 이야기 한 대로 internal class 임에도 그대로 문제없이 빌드도 되고 테스트도 가능하다.
아무런 문제 없이 의도되로 테스트가 잘 되었다.
지금까지 만들어둔 개인용 모듈의 코드를 잔뜩 수정하라고 애플이 엿을 먹여주고 있다. 아아 괴롭다. 하지만 정상화 과정이라고 생각하고 노가다를 준비해야겠다. =_=
[관련글] Swift 프로젝트의 유닛테스트(Unit Test) - Xcode 6 버전 전용
[관련글] 스위프트(Swift) 가이드
0 comments:
댓글 쓰기