2013-10-25 33 views
14

我正在构建一个通用的iPhone/iPad应用程序,并且在某些情况下UI显着不同(即,在iPhone上,我们使用TableViews的Master/Detail范例,而在iPad上,我们使用的是包含细节)。将Xcode 5中的单个XCTest单元测试用例针对通用应用程序的特定iOS设备?

由于界面如此不同,它会改变视图控制器单元测试的构造方式。在集合视图中,我们必须测试以确保单元格构建正确并包含所有详细信息,而在iPhone上,我们需要两组测试 - 一个用于主列表,另一个用于详细信息屏幕。

所以我的问题是,在一个通用应用程序正在使用Xcode 5与XCTest框架构建,你可以针对个别单元测试用例/类在特定的物理设备上运行?

我在这里遇到了类似的问题 - iOS Unit testing universal application - 但提问者有不同的意图,并使用旧技术。

我也看到了建议做个别测试功能检查UserInterfaceIdiom但这似乎很粗糙。理想情况下,会有一个注释来指定在特定设备上运行的特定测试,或者能够为特定设备指定整个测试类。

在此先感谢您的建议。

- 编辑 -

@TommieC我走上什么似乎是适当的路径,如果微幅下挫手册。我创建了两个新的测试特定方案,一个用于手机大小的设备,另一个用于平板电脑大小的设备。在这些方案中,我编辑了测试部分,并在设备特定的测试中加入了核心测试。

然后我让詹金斯执行两个构建步骤,针对相应的设备测试特定的方案。这种方法的缺点是两个构建步骤。不过,我打算将jenkins作业拆分并在两个从属设备上运行,并在每台设备上连接适当的设备以并行化测试。

AFAIK这也将是Xcode构建服务友好,因为它的工作原理也是基于项目中的方案。这真的太糟糕了,没有什么更优雅的内置到XCTest这个,考虑到这种情况在新的设备类型发挥作用的情况下不能很好地扩展(手表/电视/吹风机等)

+0

如果你反对'UserInterfaceIdiom'你有没有考虑拆分iPad/iPhone的独立测试到他们自己的测试类,并设立另一个目标是什么?这样的iPhone目标,你可以排除iPad的测试。 – squarefrog

+0

如果是唯一的解决方案,我并不反对使用它。虽然分割测试用例应该可以在文件级进行测试,但这种做法有点丑陋....再加上在我看来,在单元测试中引用用户界面时感觉不对劲:) –

+0

这是一个公平的评论。说实话,我在单元测试中唯一使用'UserInterfaceIdiom'的方法是根据习惯用法来确定要加载哪个Storyboard。 – squarefrog

回答

2

要针对特定​​于设备的测试,需要编辑项目的方案。在Product> Scheme> Edit Schemes下,可以选择为每个设备选择特定于设备的测试。

Scheme Editor

+0

嗯,这只是如果你想在模拟器上运行,对吗?当我说“设备”是指物理设备时 - 会更新我的问题。 –

+1

@MattS其实我相信这也适用于设备。我没有加载我的,但看到列表的顶部。 –

+1

该列表不是每个测试,这是每个方案。如果将其设置为1,则该方案的测试模式将使用该配置运行。编辑 - 尽管如此,您可以创建单个方案用于测试。 –

1

下面是我提出的解决方案。

将测试分解为iPhone特定测试和iPad特定测试。

现在专门为iPhone或iPad添加一个新的Target(Cocoa Touch Unit Testing Bundle)。如果您已经编写了许多常见测试,则复制当前测试目标可能更为谨慎。

现在,通过单击导航器中的类,确保您的iPhone特定测试类仅包含在iPhone测试目标中,然后打开“实用工具”面板。您可以使用“目标成员”复选框来设置您的班级所属的目标。

Target Membership panel

进一步来说,你可以为你的两个目标添加不同的方案进行运行测试更快。

+0

嗯,一个有趣的想法。我会给它一个旋风,看看它如何与詹金斯整合并报告回来。 –

+0

尽管最终产品实际上是两种答案的组合 - 最终产品选择了其他答案,但单独的测试目标与单独的方案实际上是我想到的实施。 –