我有在照片库中保存图片的应用程序的功能。一个我不知道如何测试这个代码: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'成为一个隐藏的实现细节。 –