我有功能,在应用程序保存照片画廊。A我想知道如何测试这些代码:
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!)。但是有一种方法可以在单元测试中跳过此警报,或者检查弹出并按允许的人?(就像我说的,对于这个测试,让我们假设我有这个权限)
还是有办法嘲弄这种行为?
发布于 2017-07-12 03:10:37
是的,我会嘲笑PHPhotoLibrary。您需要替换的主要内容是使用PHPhotoLibrary.shared(),它创建了一个具体实例的依赖关系。相反,我们可以依赖于抽象,即协议。
然后,生产代码可以提供PHPhotoLibrary.shared()作为实例使用。测试代码可以提供模拟对象。
如果需要更详细地说明是否需要打破依赖关系,或者创建模拟对象,或者两者兼而有之,请告诉我。
https://stackoverflow.com/questions/44902889
复制相似问题