我正在构建一个通用的iPhone/iPad应用程序,在某些情况下UI会有很大的不同(例如在iPhone上我们使用带有TableView的Master/Detail范例,而在iPad上我们使用带有包含细节的单元格的CollectionView) .
因为接口是如此不同,它改变了构建视图控制器的单元测试的方式.在集合视图中,我们必须进行测试以确保单元格正确构建并包含所有详细信息,而在iPhone上我们需要两组测试 - 一个用于主列表,一个用于详细信息屏幕.
所以我的问题是,在使用Xcode 5和XCTest框架构建的通用应用程序中,您是否可以将单个单元测试用例/类定位到特定物理设备上运行?
我在这里遇到了一个类似的问题 - iOS单元测试通用应用程序 - 但提问者有不同的意图,并使用旧技术.
我也看到了对UserInterfaceIdiom的各个测试函数进行检查的建议,但这看起来很粗糙.理想情况下,会有一个注释指定在特定设备上运行的特定测试,或者能够为特定设备指定整个测试类.
提前感谢您的建议.
- 编辑 -
@TommieC引导我走下似乎适当的路径,如果是一个微薄的手册.我创建了两个新的测试特定方案,一个用于手机大小的设备,另一个用于平板电脑大小的设备.在这些方案中,我编辑了测试部分,并在核心测试中添加了特定于设备的测试.
然后我让jenkins执行两个构建步骤,针对相应的设备来测试特定的方案.这种方法的缺点是两个构建步骤.但是,我计划将jenkins作业拆分并在2个从站上运行,并将相应的设备连接到每个从站以并行化测试.
AFAIK这也将是Xcode Build Services友好的,因为它也基于项目中的方案工作.这真的太糟糕了,XCTest没有更优雅的内置,考虑到在新的设备类型发挥作用(手表/电视/吹风机等)的情况下,这不会非常好地扩展.
请考虑以下示例:
- (void)exampleFunction
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
SomeClass *classObject = [[SomeClass alloc] init];
[classObject someFunctionThatDoesBackgroundWorkAndCallsACompletionBlock:^(NSDictionary *results) {
SomeNeatObject *object = appDelegate.someNeatObject;
[object doSomeNeatStuff:results];
}];
}
Run Code Online (Sandbox Code Playgroud)
假设在主/ UI线程上执行完成块以避免额外的疯狂,这是我不确定的:
我意识到appDelegate不应该被过度使用,但如果你使用Apple的模板来初始化Core Data堆栈(至少在iOS上),它可以保存有关应用程序当前状态的信息,例如Core Data相关对象.项目).那个特殊情况(核心数据)让我担心这个堆栈不是线程安全的,也不是复制它的好主意.
提前致谢.
我正在实施Google Cloud Endpoints API的iOS客户端,并希望了解如何在iOS内部解释Cloud Endpoints发现文档,因此当我在Cloud Endpoints端进行更改时(添加字段,更改字段名称) ,删除字段)老客户会发生什么?
我知道Cloud Endpoints为Javascript/AngularJS方面公开了一个REST JSON API,我们可以通过iOS上的AFNetworking手动绑定这些内容.我熟悉如何在该场景中管理客户端上的API更改,但如果使用Toolkit SDK/RPC实现是有意义的,那么我宁愿这样做.
这都是通过API版本化来处理的吗?那么老客户会要求使用旧版本的API吗?那么Google iOS SDK是否支持语义版本控制?如果没有,我可以看到版本号快速失控.
注意这是GCE的python版本.