我可以在测试目标中使用 ALAssetsLibrary 吗?

Posted

技术标签:

【中文标题】我可以在测试目标中使用 ALAssetsLibrary 吗?【英文标题】:Can I use ALAssetsLibrary in test target? 【发布时间】:2015-07-24 09:47:19 【问题描述】:

我想编写一个单元测试,在该测试中我需要使用 ALAssetsLibray 从相机胶卷中获取项目。

测试未在设备上运行。 如果我尝试在模拟器中运行,我会收到此错误:

2015-07-24 11:39:13.558 xctest[2508:43512] 枚举 AssetLibrary 组时出错 Error Domain=ALAssetsLibraryErrorDomain Code=-3311 “用户拒绝访问” UserInfo=0x7ffea389ae10 NSLocalizedFailureReason=用户已拒绝应用程序访问他们的媒体。, NSLocalizedDescription=用户拒绝访问, NSUnderlyingError=0x7ffea158b040 "操作无法完成。(ALAssetsLibraryErrorDomain 错误 -3311.)"

我怎样才能做到这一点?

(这个老问题的重复,但它没有正确答案:)

【问题讨论】:

【参考方案1】:

在我看来,正确的做法是模拟 ALAssetsLibray 对象并返回您自己的模拟数据,就好像它是由资产库获取的一样。您只需对自己的代码和自己的方法进行单元测试,无需测试资产库是否正常工作。

【讨论】:

问题是生产代码将使用来自 ALAssetsLibrary 的assetURL(assets-library:// 方案)。我想在大量项目(来自我的相机胶卷)上进行测试。 否则我需要将图像放入应用程序包中以进行测试并覆盖从 ALAsset 获取 UIImage。 @vale4674 即使您的代码使用资产 URL,您仍然可以让您的模拟返回图像。它甚至可以是相同的重复图像,因为您只需要对代码进行单元测试。如果您需要使用您的代码对资产库进行某种压力测试,那么它听起来更像是一种集成测试,您只能通过 GUI 上的自动化测试来实现。

以上是关于我可以在测试目标中使用 ALAssetsLibrary 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode UI 测试:我可以使用 UI 测试脚本访问目标应用程序文件夹吗?

Keras-Tuner:是不是可以在目标/度量函数中使用测试/验证集?

如何在静态库项目中使用 XCode 性能工具?

iOS 8 小部件单元测试

从测试目标看不到 Swift 类

我有一个Xcode静态库项目,如何添加测试目标,以便我可以在那里运行它? (而不是在链接到它的项目中。)