2017-05-27 12 views
1

私はCoreLocationに関連する関数をテストするテストを書いています。ロケーションサービスが有効になっていない場合、この関数はエラーをスローします。私のテストでテストケースでCLLocationManagerの異なるパーミッションをテストする方法

func someFunction() throws { 
    guard CLLocationManager.locationServicesEnabled() throw NSError.init(
      domain: kCLErrorDomain, 
      code: CLError.Code.denied.rawValue, 
      userInfo: nil) 
    } 
    ... 
} 

CLLocationManager.locationServicesEnabled()は常にtrueです。 falseシナリオをテストする方法はありますか?

答えて

0

静的メソッドを直接使用する代わりに、この呼び出しをクラスにラップし、そのクラスにプロトコルを適用させることで、コードは具体的な実装ではなくそのインターフェイスに依存します。

protocol LocationManager { 
    var islocationServicesEnabled: Bool { get } 
} 

class CoreLocationManager: LocationManager { 
    var islocationServicesEnabled: Bool { 
     return CLLocationManager.locationServicesEnabled() 
    } 
} 

そして、あなたの関数(またはクラス)が代わりに(依存性注入)、それを所有しているの依存関係を受け取る必要があります:あなたのテストでは

func someFunction(locationManager: LocationManager) throws { 
    guard locationManager.islocationServicesEnabled else { 
     //... 
    } 
} 

を、あなたは「偽」LocationManagerを渡し、すべてのシナリオをテストすることができます。 (プロダクションコードでは、CoreLocationManagerを渡します)

これは、どのような依存関係についても一般的なアドバイスです。

関連する問題