![](/img/trans.png)
[英]Running individual XCTest (UI, Unit) test cases for iOS apps from the command line
[英]Target individual XCTest unit test cases in Xcode 5 to a specific iOS device for a universal app?
我正在构建一个通用的iPhone / iPad应用程序,并且在某些情况下,UI明显不同(即,在iPhone上,我们将Master / Detail范例与TableViews一起使用,而在iPad上,我们将CollectionView与包含详细信息的单元格一起使用) 。
因为接口是如此不同,所以它改变了构造视图控制器的单元测试的方式。 在集合视图中,我们必须进行测试以确保正确构建了单元并包含所有详细信息,而在iPhone上,我们需要进行两组测试-一组用于主列表,一组用于详细屏幕。
所以我的问题是,在使用Xcode 5和XCTest框架构建的通用应用程序中,您可以针对要在特定物理设备上运行的单个单元测试用例/类吗?
我在这里遇到了一个类似的问题-iOS单元测试通用应用程序 -但是问问者的意图不同,并且正在使用较旧的技术。
我还看到了建议对UserInterfaceIdiom的单个测试功能进行检查的建议,但这似乎很粗糙。 理想情况下,应该有一个注释,用于指定在特定设备上运行的特定测试,或者能够为特定设备指定整个测试类别。
预先感谢您的建议。
- 编辑 -
@TommieC引导我走了一条合适的道路,如果是一些小手册。 我创建了两种新的测试专用方案,一种用于手机大小的设备,另一种用于平板电脑的设备。 在这些方案中,我编辑了测试部分,并将其与特定于设备的测试一起添加到了核心测试中。
然后,我让詹金斯执行两个构建步骤,将适当的设备作为目标以测试特定的方案。 这种方法的缺点是两个构建步骤。 但是,我计划拆分jenkins作业,并在2个从站上运行它,并在每个从站上连接适当的设备以并行化测试。
AFAIK还将对Xcode Build Services友好,因为它也基于项目中的方案工作。 实在太糟糕了,XCTest并没有内置更优雅的功能,考虑到在使用新设备类型(手表/电视/吹风机/等)的情况下,缩放效果不佳
要针对特定设备的测试,需要编辑项目的方案。 在产品>方案>编辑方案下,可以选择为每个设备选择特定于设备的测试。
这是我提出的解决方案。
将您的测试分为iPhone特定测试和iPad特定测试。
现在添加专门用于iPhone或iPad的新Target(可可触摸单元测试套件)。 如果您已经编写了许多通用测试,则最好还是复制当前的测试目标。
现在,通过单击导航器中的类,然后打开“实用程序”面板,确保仅将iPhone特定的测试类包括在iPhone测试目标中。 您可以使用“目标成员资格”复选框设置班级所属的目标。
要对此进行扩展,可以为两个目标添加不同的方案,以更快地运行测试。
我一直想做同样的事情,并且遇到了这个旧帖子。 我的解决方案涉及将特定的设备测试命名为“ Pad”或“ Phone”结尾,然后过滤测试列表以包括当前设备的测试:
class MyTests: XCTestCase {
override class var defaultTestSuite: XCTestSuite {
let suite = XCTestSuite(forTestCaseClass: MyTests.self)
let newSuite = XCTestSuite(name: "MyTests")
for test in suite.tests {
// Name is of the form "-[MyTests test*]"
if test.name.hasSuffix("Pad]") {
// iPad only test
if UIDevice.current.userInterfaceIdiom == .pad {
newSuite.addTest(test)
}
}
else if test.name.hasSuffix("Phone]") {
// iPhone only test
if UIDevice.current.userInterfaceIdiom == .phone {
newSuite.addTest(test)
}
}
else {
// Can run on both devices
newSuite.addTest(test)
}
}
return newSuite
}
func testAll() { // All devices test }
func testOnlyPad() { // iPad only test }
func testOnlyPhone() { // iPhone only test }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.