はじめに
Cuckooを使ったUnitテストで、
Array(配列)のMatchableを作成した際の備忘録を残しておきます。
なお、誤った記述等ございましたら、コメントをいただけますと幸いです。
実際に使用した用途・目的
Bluetoothクラスの実装で、
discoverCharacteristics(_:for:)メソッド
のテストコードを書く際に、このメソッドの引数である[CBUUID]?をMatchableに適合する必要がありました。
CBUUIDは、Bluetoothで使用する特殊な型です。
CBUUIDの使い所については【Swift5】Bluetoothクラス実装の備忘録にも記載しておりますので、宜しければご覧ください。
エラー内容
Argument type '[CBUUID]' does not conform to expected type 'OptionalMatchable'
実際にテストした内容
discoverCharacteristics(_:for:)メソッド
を呼んだ際に、引数のCBUUIDに適切な値がセットされて呼ばれているのかをテストします。
_ = XCTContext.runActivity(named: "Peripheral.discoverCharacteristics is called.", block: { _ in
let uuidArray: [CBUUID] = [CBUUID(string: Const.Bluetooth.kUUID01),
CBUUID(string: Const.Bluetooth.kUUID02),
CBUUID(string: Const.Bluetooth.kUUID03)]
verify(self.peripheral, times(1)).discoverCharacteristics(uuidArray, for: any())
})
解決方法・コード
エラーの解消には以下の2つのextensionが必要でした。
MatchableExtensions.swift
extension Array: OptionalMatchable where Element == CBUUID {
public var optionalMatcher: ParameterMatcher<[CBUUID]?> {
return equal(to: self)
}
}
extension CBUUID: OptionalMatchable {
public var optionalMatcher: ParameterMatcher<CBUUID?> {
return equal(to: self)
}
}
今回は、CBUUID?の配列に適合する必要があったので、Arrayのextensionと、CBUUIDのextensionの2つが必要でした。
まとめ
Cuckooを使っているからといって特殊な対応が必要というわけではなく、
Arrayのextensionが作れれば問題なし!といった感じでした。
応用も、基礎知識を持っていれば対応できるのですね・・・!