Swift의 모크 생성 라이브러리 "Mockolo"설정 및 작업 방법
입문
Xcode는 Moke 생성 기능을 탑재하지 않아 수동 설치가 힘들어 가져오기로 했습니다.
"Mockolo"가 뭐예요?
이것은 Swift에 사용되는 모델 생성 라이브러리입니다.
현재 프로토콜의 모델 생성만 지원하고 클래스의 모델 생성은 추가될 예정입니다.
1.1.3 생성 클래스도 지원합니다.
https://github.com/uber/mockolo/releases/tag/1.1.3
환경
설치하다
Mockolo 설치
Mint에서 설치합니다.
Mintfile
+ uber/[email protected]
$ mint bootstrap
수동으로 설치하려면 공식 문서를 참조하십시오.https://github.com/uber/mockolo#build--install
구축 시 모델 생성
모콜로가 모크를 생성하는 시간이 빠르기 때문에 구축할 때마다 모크를 생성합니다.
구축 시간에 신경을 쓰면 명령을 수동으로 실행하여 모델을 생성합니다.
Xcode에서 항목 열기
TARGETS에서 제품 대상 선택 > 구축 단계 > + > 새 실행 단계 > 를 클릭합니다.
드래그 앤 드롭 중 소스를 완료하기 전에 탐색
스크립트는 "Generate Mocks with Mockolo"처럼 알기 쉬운 이름으로 명명할 수 있습니다.
다음 스크립트를 확장하고 작성합니다.
if which mint >/dev/null; then
rm -f $SRCROOT/MockResults.swift
mint run mockolo mockolo --sourcedirs $SRCROOT/{製品ターゲット名} --destination $SRCROOT/MockResults.swift
else
echo "warning: Mint not installed, download from https://github.com/yonaskolb/Mint"
fi
트레일러가 이미 존재하면 구축 오류가 발생할 수 있으므로 생성하기 전rm
에 삭제합니다.파일 내보내기 > + 를 클릭합니다.
설명
--destination
에서 지정한 파일 경로입니다.$SRCROOT/MockResults.swift
생성된 파일을 작성하지 않으면 CI/CD에서 다음 오류가 발생합니다.error: Build input file cannot be found:
아래의 보도를 참고하도록 허락해 주십시오.https://qiita.com/lovee/items/fa3ef5e60cfbf31996c0
int를 사용하지 않으면 취소
mint run mockolo
하고 if 문장의 조건을 변경합니다.사용 중인 옵션을 설명합니다.
다음 두 가지가 필요합니다. 필요에 따라 값을 변경하십시오.
탭 페이지에서 항목 작성 또는 편집
설명
--sourcedirs
객체 폴더 경로 생성 제품 대상 이름의 폴더를 지정하면 일반적으로 모든 파일을 객체로 사용할 수 있습니다.
--destination
모크 생성 경로
--mock-final
는 임의의 것이지만 나는 끼는 것을 좋아한다.탭 페이지에서 항목 작성 또는 편집
설명
--mock-final
모크
final
에 1.2.8 추가기타 옵션은 공식 홈페이지 또는
mockolo --help
을 참조하십시오.프로젝트를 구성하고 [$SRCROOT (일반적으로 프로젝트 루트 폴더)]에서 [MockResults.swift] 를 생성한 후 프로젝트로 드래그합니다.
복사됨 확인란을 닫고 완료를 클릭합니다.
버전 제어에서 무시
불필요한 충돌을 피하기 위해 생성된'MockResults.swift'를 버전 제어에서 제외합니다.
Git를 사용할 때는 다음을 ".gitignore"에 추가하면 됩니다.
.gitignore
+ MockResults.swift
조작 방법
모델을 생성할 프로토콜에 대한 설명
@mockable
을 추가합니다.유형 별칭이 있으면 괄호 안에 쓰십시오.
Foo.swift
/// @mockable(typealias: T = AnyObject; U = StringProtocol)
public protocol Foo {
associatedtype T
associatedtype U: Collection where U.Element == T
associatedtype W
var num: Int { get set }
func bar(arg: Float) -> String
}
구축은 몽판을 생성합니다.MockResults.swift
// クラス名は `{プロトコル名}Mock` となる
public class FooMock: Foo {
typealias T = AnyObject
typealias U = StringProtocol
typealias W = Any // 指定しないと `Any` になる
init() {}
init(num: Int = 0) {
self.num = num
}
var numSetCallCount = 0
var underlyingNum: Int = 0
var num: Int {
get {
return underlyingNum
}
set {
underlyingNum = newValue
numSetCallCount += 1
}
}
var barCallCount = 0
var barHandler: ((Float) -> (String))?
func bar(arg: Float) -> String {
barCallCount += 1
if let barHandler = barHandler {
return barHandler(arg)
}
return ""
}
}
자동으로 생성된 코드에서 테스트에 사용되는 속성만 설명합니다.속성
설명
{속성 이름} CallCount 설정
호출자 호출 횟수
메소드 이름}CallCount
메소드 호출 횟수
{메소드 이름}Handler
메소드 호출 시 실행되는 엔클로저
테스트 시 다음과 같이 사용합니다.
FooTests.swift
func testMock() {
// モックを生成する
let mock = FooMock(num: 5)
// 対象プロパティのセット回数を確認する
XCTAssertEqual(mock.numSetCallCount, 1)
// ハンドラは対象メソッドの呼び出し前に自分で代入する
mock.barHandler = { arg in
return String(arg)
}
// 対象メソッドの呼び出し回数を確認する
XCTAssertEqual(mock.barCallCount, 0)
}
끝내다
쉽게 모형이 만들어졌어요!
이렇게 하면 테스트 시 수동으로 VIPER 트레일러를 설치하는 번거로움을 줄일 수 있다😊
일찍 도입됐으면 좋겠어요.
참조 링크
Reference
이 문제에 관하여(Swift의 모크 생성 라이브러리 "Mockolo"설정 및 작업 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/uhooi/items/0226a28190aea6392806텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)