LoginSignup
2
1

More than 3 years have passed since last update.

【Swift5】UnitテストでArray(配列)のMatchableを作った時の備忘録

Last updated at Posted at 2020-02-16

はじめに

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が作れれば問題なし!といった感じでした。

応用も、基礎知識を持っていれば対応できるのですね・・・!

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1