私はフォトギャラリーに写真を保存したアプリで機能を持っています。XCTestsとPHPhotoLibrary
func saveInPhotoGallery() {
guard self.cameraOutput != nil else { return }
if self.cameraOutput is UIImage {
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAsset(from: (self.cameraOutput as? UIImage)!)
}, completionHandler: { (saved, error) in
guard error == nil else {
self.unsucessfullSavingOperation(error)
return
}
})
}
}
のはself.cameraOutput
であり、UIImage
とSTHが間違っていたとエラーがcompletionHandler
であり私はself.unsucessfullSavingOperation(error)
で終わったことを、今、私は私の場合のシナリオでテストすることを想定してみましょう:私はこのコードをテストする方法を疑問に思います方法。これは当然の別々のテストを持っていますが、私がカバーしたいことは次のとおりです。
は何かがカメラロールに画像を挿入するとうまくいかなかったときはいつでも、私は私がしようとすると、この方法
呼び出すとなってしまいますことを確認してくださいテスト対象のsaveInPhotoGallery()
に電話すると、フォトライブラリへのアクセスが必要であるという警告が表示されます(doh!)。しかし、このアラートをスキップしてユニットテストに入れるか、またはそれを確認してを入力してを許可しますか? (私が言ったように、このテストでは、私にこのパーミッションがあると仮定しましょう)
これを模擬する方法がありますか?
モックオブジェクトがエラーを返す可能性があるので、これは本当に価値があるのだろうかと疑問に思っています。成功すると、私は 'self.unsucessfullSavingOperation(error)'をテストし、成功した操作で同じことを試してみましょう。私はfuncsをテストして、可能なすべての出力を個別に処理するので、まだ嘲笑の点はありますか? – Kuba
あなたはすでに 'unsucessfullSavingOperation'の単体テストをしていますか?その場合、嘲笑は一段階高いそれらのテストを扱うことができます。これにより、テスト中に 'saveInPhotoGallery'が呼び出され、安全にリファクタリングすることができます。また、 'unsucessfullSavingOperation'に隠れた実装の詳細を作るでしょう。 –