Vic*_*nin 40 xcode ios jenkins
一些背景:
我有iOS应用程序,目标配置为运行unitTests.我在我的MacBook上运行构建自动化工具jenkins,它自动构建此应用程序并运行所有测试(使用命令行xcodebuild工具).
一切都运行良好的Xcode 4.这个构建自动化工具在不同的用户下运行,并运行所有这些测试.
我最近切换到Xcode 5,它开始失败,因为它无法启动模拟器.
问题
我有一个方案UnitTests配置为运行测试(逻辑测试).AI使用以下两种方法之一运行这些测试:
在Xcode中命令U.
或者命令行"/ usr/bin/xcodebuild -scheme UnitTests -sdk iphonesimulator -configuration Release clean build TEST_AFTER_BUILD = YES"
在这两种情况下,它都会尝试启动模拟器.但是,根据我的理解,它并不需要它.无论如何,它运行在顶级x86上,它看起来不像在Simulator上安装任何应用程序.
有没有办法摆脱这个讨厌的模拟器启动(因为它打破了我的构建自动化)?
更新1
似乎找到了非常相似的问题,但无法使其正常工作: 在Xcode 4中运行逻辑测试而不启动模拟器
更新2
我找到了非常相关和有趣的问题/答案:Apple CI/Xcode Service和Jenkins
rus*_*ord 27
使用xCode 7和xCtool.
xctool能够在没有模拟器的情况下执行单元测试.
要使这个工作,
1.更新目标设置以在没有主机应用的情况下运行
选择项目 - >然后测试目标 - >将主机应用程序设置为无.
2.如果没有,请安装xctool.
brew install xctool
Run Code Online (Sandbox Code Playgroud)
3.使用带xctool的终端运行测试.
xctool -workspace yourWorkspace.xcworkspace -scheme yourScheme run-tests -sdk iphonesimulator
Run Code Online (Sandbox Code Playgroud)
Sal*_*ule 16
您可以创建Mac OSX单元测试而不是iOS单元测试.这要求您不要在单元测试中包含任何iOS特定库.您可以通过以下方式执行此操作:
您现在可以将单元测试中的源添加到iOS测试中,而无需启动模拟器.
rfr*_*lli 14
我向苹果工程师提出了同样的问题.不幸的是,似乎你无法实现这一点并同时与iOS保持联系.有一些技巧可以检查是否测试.您可以将此代码段放在AppDelegate.h或其他全局类中,以表示不加载根视图控制器并防止任何wierdo ui破坏您的单元测试:
static BOOL isTesting() {
BOOL isTesting = !isEmpty([[[NSProcessInfo processInfo] environment] objectForKey:@"XCInjectBundle"]);
return isTesting;
}
Run Code Online (Sandbox Code Playgroud)
我还有一位苹果工程师证实这是一张合法的支票.并且在信用到期时给予信用,这来自:以编程方式确定iOS项目中的当前目标(运行或测试)
编辑: 我也有这个成功,它更直接:
static BOOL isTesting() {
return [[[NSProcessInfo processInfo] processName] isEqualToString:@"xctest"];
}
Run Code Online (Sandbox Code Playgroud)
osx 测试目标可能会成为一个巨大的麻烦,因为您必须自己管理要包含哪个源文件。放在@testable import YourAppNameXCTest 文件之上会更方便。因此,只需阻止您的应用程序在 XCTest 运行时启动即可。
在你的 AppDelegate 中输入:(Swift 3 解决方案)
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
if ProcessInfo.processInfo.environment["XCInjectBundleInto"] != nil {
return false
}
...
Run Code Online (Sandbox Code Playgroud)
这不会阻止模拟器启动,但会节省你很多时间。
| 归档时间: |
|
| 查看次数: |
19931 次 |
| 最近记录: |