我有在照片庫中保存圖片的應用程序的功能。一個我不知道如何測試這個代碼: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
和某事出了錯並且在completionHandler
一個錯誤,所以我在self.unsucessfullSavingOperation(error)
結束了方法。這當然有單獨的測試,但我想蓋:
確保每當事情會出錯,在相機膠捲中插入圖像我最終會調用這個方法
當我嘗試在測試目標中調用saveInPhotoGallery()
它會產生警告,這需要訪問您的照片庫(doh!)。但有一種方法可以跳過此警報單元測試或檢查無論它彈出並按允許? (就像我說的,爲了這個測試,讓我們假設我有這個權限)
還是有辦法模擬這種行爲?
謝謝,很明顯,但不知道是否真的值得這樣做,因爲模擬對象可以返回錯誤,成功,假設我將測試'self.unsucessfullSavingOperation(error)',並且與成功操作相同。自從我測試函數來分別處理所有可能的輸出後,仍然有一點嘲笑。 – Kuba
因此,您已經有'unsupportedSullSavingOperation'的單元測試?在這種情況下,嘲笑會讓你更高級地處理這些測試。這會在測試中帶來'saveInPhotoGallery',這會讓你安全地重構它。它也會使'unsuccessfullSavingOperation'成爲一個隱藏的實現細節。 –