定義
public protocol Stubbable {
static func stub(_ edit: (inout Self) -> Void) -> Self
static func stub() -> Self
}
public extension Stubbable {
static func stub(_ edit: (inout Self) -> Void) -> Self {
var stub = stub()
edit(&stub)
return stub
}
}
使い方
struct User {
var id: String
var name: String
var followers: Int
}
// 別ファイル(テストターゲット内)でextensionしてもOK
extension User: Stubbable {
// デフォルトのスタブを定義
static func stub() -> User {
User(
id: "1",
name: "John Smith",
followers: 10
)
}
}
// デフォルトのスタブを生成
let user1: User = .stub()
// デフォルトから任意のパラメーターを変更して生成(テスト時に便利)
let user2: User = .stub { $0.id = "2" }
補足
ライブラリならもっと素晴らしいものがあります