ios – 有机会针对EKEventStore编写单元测试吗?

ios – 有机会针对EKEventStore编写单元测试吗?,第1张

概述我们正在我们的应用程序中实现“同步到日历”功能.我们的同步过程涉及我们从服务器端获取的要复制到iPhone日历的事件.目前我不确定我们为此同步编写的方法是否解决了我们期望的所有可能情况,这就是我想要对其进行单元测试的原因.它包含许多对EKEventStore的调用,正如Apple文档所述,需要使用requestAccessToEntityType调用:completion:first: On iO 我们正在我们的应用程序中实现“同步到日历”功能.我们的同步过程涉及我们从服务器端获取的要复制到iPhone日历的事件.目前我不确定我们为此同步编写的方法是否解决了我们期望的所有可能情况,这就是我想要对其进行单元测试的原因.它包含许多对EKEventStore的调用,正如Apple文档所述,需要使用requestAccesstoEntityType调用:completion:first:

On iOS 6 and later,you must request access to an entity type after the event store is initialized with requestAccesstoEntityType:completion: for data to return.

……在我们运行单元测试的环境中很难处理.

目前我正在考虑使用EKEvent对象的一些NSArray来实现EKEventStore的mock子类.

是否有可能对EKEventStore进行单元测试而不编写这样的模拟子类,它会模仿我们在同步例程中使用的所有方法?

解决方法 最近我发现最终可以在Simulator中使用特殊的Hack来做到这一点:有TCC.db数据库,其中存储了这个和其他一些访问权限.

我能够设置我的单元测试套件,以便在启动时,使用与EKAuthorizationStatusAuthorized对应的值修改TCC.db表.完成此更改后,可以使用对EKEventStore的完全访问权限编写所有后续测试.

首先,这里有一点解释:Grant access to NAB programatically on iOS 7.0 Simulator.

还有一个很好的项目JPSimulatorHacks,其中包含完成此Hack的代码.它支持授予Calendar权限.

现在,我可以对我的Calendar Sync代码进行单元测试,而无需详尽地记录EK类.

重要细节:

无法访问TCC.db,至少当您的测试目标未指向Host Application中的实际应用程序时,我没有找到它.当我确实将Host Application设置为None时,我无法找到TCC.db并因此授予任何内容.这就是为什么目前我的单元测试目标我创建了人工应用程序MyAppnameTestsApp所以现在我将我的单元测试目标的主机应用程序设置为MyAppnameTestsApp.这给了我有效的应用程序与TCC.db,同时我不需要我在运行Cmd U时加载整个应用程序.

总结

以上是内存溢出为你收集整理的ios – 有机会针对EKEventStore编写单元测试吗?全部内容,希望文章能够帮你解决ios – 有机会针对EKEventStore编写单元测试吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1072414.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存