我可以在测试目标中使用 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 测试脚本访问目标应用程序文件夹吗?