アップルのCoreBluetoothフレームワークを使用してBluetooth Low Energyを介して周辺機器と通信するSwiftでiOSアプリケーションを構築しています。 CBCentralManagerDelegateとCBPeripheralDelegateプロトコルを実装するカスタムコントローラのテストユニットの努力で、私は二重のCoreBluetoothのAPIの動作を模倣するCBCentralManagerからサブクラステストを提供しています。コントローラーのデリゲートコールバックは、適切な時刻に呼び出されます。ユニットテストで使用できない初期化子を使用したCocoaオブジェクトを偽装する
これまでのところ、これはかなりうまく機能しています。それはCBPeripheralDelegateコールバックを呼び出すに来るときしかし、CBPeripheralが渡される必要がある。通常、私はちょうど偽のコンポーネントが自分自身のサブクラスを提供するかCBPeripheralのインスタンスをモックでしょう。
はここでキャッチです:基礎となるのObjective-Cライブラリでの指定イニシャライザCBPeripheralが私の偽造CBCentralManagerにCBPeripheralをインスタンス化し、引数として渡すから私を防止する使用不能としてマークされています試験中のCBPeripheralDelegate。 (XCodeはコンパイラエラーで私を残します)。これまで、偽のサブクラス(私は使用できない指定されたinitを呼び出さなければならないため動作しません)でカスタムイニシャライザを提供しようとしました。エクステンション(明らかに許可されていません)を使用し、Objective-Cランタイムでセレクタ(init)を呼び出すと、使用できないということはありません。最後のアプローチは最も有望なようですが、実際には動作していないので、間違ったタイプの管理されていないオブジェクト(私のテストクラス)を私に残します。
私は間違いなくここにバリケードを打ってきましたし、initにもかかわらずCBPeripheralをインスタンス化
上の任意の入力のために非常に喜んでいるだろう()使用できない
異なるアプローチであること単位試験のためにCBPeripheralDelegate