Writing iOS acceptance tests using Kiwi – Being Agile
那里描述的所有东西确实很有效.但!当我进行验收测试时,有一件事打破了决定论.
这是Github上的回购,帖子的作者推动了他的实验(可以在评论的页面底部找到):https://github.com/moredip/2012-Olympics-iOS–iPad-and-iPhone–source-code/tree/kiwi-acceptance-mk1
考虑一下他用来点击视图的代码:
- (voID) tapVIEwViaSelector:(Nsstring *)vIEwSelector{ [UIautomationBrIDge tapVIEw:[self vIEwViaSelector:vIEwSelector]]; sleepFor(0.1); //ugh}
… sleepFor有following definition behind itself:
#define sleepFor(interval) (CFRunLoopRunInMode(kcfRunLoopDefaultMode,interval,false))
这是一个天真的尝试(‘天真’不是关于作者,而是关于这个事实,它是第一个陷入困境的事实)等待一小段时间,直到所有的动画都被处理并浸泡所有可能的已经(或可能)被安排到主要运行循环的事件(另见this comment).
问题是这个天真的代码不能以确定的方式工作.在当前编辑的文本字段的键盘消失之前,有一串UI交互导致fx下一个按钮点击,等等……
如果我只是将时间从0.1增加到fx 1,则所有问题都会消失,但这会导致每次单独的交互,例如“用文本填充文本字段……”或“带标题的按钮”……第二!
所以我并不仅仅意味着在这里增加一个等待时间,而是一种做出这种人工等待的方法,保证我可以继续下一步的测试用例.
我希望它应该是一种更可靠的方式来等待所有由当前动作(所有转换/动画或任何主要运行循环的东西)引起的东西完成.
总结一下这是一个问题:
有没有办法耗尽/排出/浸泡所有调度到主线程及其运行循环的东西,以确保主线程空闲且其运行循环是“空”?
这是我最初的解决方案:
// DON'T like itstatic inline voID runLoopIfNeeded() { // https://developer.apple.com/library/mac/#documentation/CoreFOundation/Reference/CFRunLoopRef/Reference/reference.HTML while (CFRunLoopRunInMode(kcfRunLoopDefaultMode,0.1,YES) == kcfRunLoopRunHandledSource); // DON'T like it if (CFRunLoopRunInMode(kcfRunLoopDefaultMode,YES) == kcfRunLoopRunHandledSource) runLoopIfNeeded();}解决方法 你可以试试这个
while (CFRunLoopRunInMode(kcfRunLoopDefaultMode,true) == kcfRunLoopRunHandledSource);
这将运行直到运行循环中没有更多的东西.如果0不起作用,您可以尝试将时间间隔更改为0.1.
@H_419_64@ 总结以上是内存溢出为你收集整理的ios – 是否可以检查主线程是否空闲/排出主运行循环?全部内容,希望文章能够帮你解决ios – 是否可以检查主线程是否空闲/排出主运行循环?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)