swifty mocky를 사용한 iOS 단위 테스트 조롱
Swift는 읽기 전용 리플렉션을 지원하여 안전하도록 설계되었습니다. 따라서 런타임에 프로그램을 수정할 방법이 없습니다. 전반적으로 양호하고 코드가 예상대로 실행되며 다른 구성 요소에서 변경할 수 없습니다. 그러나 주제로 돌아가서 모든 모의 프레임워크는 런타임에 클래스, 유형 및 개체를 변경할 수 있도록 리플렉션을 기반으로 구축됩니다.
이 언어는 테스트 가능한 코드를 작성하기 위해 수퍼히어로가 필요하며 우리는 프로토콜과 확장을 잘 알고 있습니다! 어떤 구현(클래스, 열거형 또는 구조체)이든 프로토콜의 목적은 그대로 남아 있습니다. 추상화를 정의하고 유형에 새로운 기능을 추가하는 것입니다.
조롱하기 위해 무엇을 할 수 있습니까?
메타 프로그래밍을 사용하여 완전한 모의 구현을 생성합니다.
그들은 단위 테스트를 위해 모의 작업을 수행하는 많은 라이브러리이며 대부분의 포플러는 Cuckoo 및 swifyMocky 입니다.
이 기사에서는 SwiftyMocky를 사용하여 조롱하는 방법에 대한 개요를 제공합니다.
Swifty모키
https://github.com/MakeAWishFoundation/SwiftyMocky
장점
- 자동으로 Swift 프로토콜 모의
- 제네릭 지원
- 간단한 설정 및 경량
- 좋은 문서
- 훌륭하고 쉬운 구문(자동 완성 활용)
- 조롱할 프로토콜 표시
- 이 주석이 있는 소스 디렉토리의 모든 프로토콜은 Mock.generated.swift에 추가됩니다.
- 모든 모의 객체에는 사용하기 쉬운 구문과 함께 주어진 메서드(인스턴스 메서드 또는 전역 함수로 액세스 가능)가 있어 주어진 메서드에 대한 반환 값을 지정할 수 있습니다(지정된 속성 기반).
- 모든 목에는 검증 방법(인스턴스 방법 또는 전역 함수 둘 다로 액세스 가능)이 있으며, 구문을 사용하기 쉽고, 방법이 모의에서 호출되었는지 여부와 횟수를 확인할 수 있습니다. 또한 메소드 속성이 중요한지 여부(및 어떤 속성인지)를 지정하는 편리한 방법을 제공합니다.
- 모든 목에는 사용하기 쉬운 구문을 사용하여 스텁 메서드가 호출될 때 실행될 클로저를 지정할 수 있는 수행 메서드(인스턴스 메서드 또는 전역 함수로 액세스 가능)가 있습니다.
설정
- Cocoapods를 사용하여 설치
- 손쉬운 모의 생성을 위한 CLI 설치
> swiftymocky doctor # 설정 확인
> swiftymocky generate # 모의 생성
- Mocks 생성은 excludeSwiftLintRules를 사용하여 swift lint 규칙을 제외 할 수 있는 Mockfile.yml 파일을 기반으로 합니다.
언어 제한 런타임 액세스로 인해 일부 엄격한 경계가 있는 Swift를 조롱하기 위해 개발자로서 우리가 가지고 있는 도구는 그리 많지 않습니다. 그리고 여기서 우리는 중요한 질문에 도달합니다. 조롱을 위해 외부 프레임워크를 사용하거나 사용하지 않는 것입니다.
잘 알려진 Uncle Bob은 가능한 한 많이 사용하지 않습니다. “ 모킹 프레임워크가 필요하기 시작하는 시점은 테스트와 코드 간의 결합이 너무 높아지는 바로 그 시점입니다. 그러나 그 후에는 모의 프레임워크를 자주 사용할 필요가 없을 정도로 코드와 테스트 간의 결합을 낮게 유지하기 위해 노력해야 합니다.”
읽어 주셔서 감사합니다! 이 글이 마음에 드셨다면 다른 분들도 읽을 수 있도록 박수 부탁드립니다 :)
행복한 코딩 :v: