如何从xcode 4.5上的命令行运行IOS单元测试

时间:2013-02-19 21:28:46

标签: ios unit-testing ios-simulator xcode4.5

我一直试图弄清楚如何从命令行运行我们的单元测试,以便我们可以自动化它们。 我正在使用XCode 4.5.2,并构建一个IOS应用程序。

首先我尝试使用它:

xcodebuild  -target "Unit Tests" -configuration "Debug (test syncserver)" -sdk iphonesimulator6.0 clean build TEST_AFTER_BUILD=YES

那将运行编译,但测试没有运行。 所以,在阅读了这里的其他解决方案之后,我安装了ios-sim并设置我的目标以后运行这个脚本: (注意我必须用“CODESIGNING_FOLDER_PATH”替换“TEST_HOST”的出现,因为我的构建中似乎不存在TEST_HOST。)

#!/bin/bash

if [ "$RUN_UNIT_TEST_WITH_IOS_SIM" = "YES" ]; then
    test_bundle_path="$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION"
    echo ios-sim launch "$(dirname "$CODESIGNING_FOLDER_PATH")" --setenv DYLD_INSERT_LIBRARIES=/../../Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection --setenv XCInjectBundle="$test_bundle_path" --setenv XCInjectBundleInto="$CODESIGNING_FOLDER_PATH" --args -SenTest All "$test_bundle_path"
    ios-sim launch "$(dirname "$CODESIGNING_FOLDER_PATH")" --setenv DYLD_INSERT_LIBRARIES=/../../Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection --setenv XCInjectBundle="$test_bundle_path" --setenv XCInjectBundleInto="$CODESIGNING_FOLDER_PATH" --args -SenTest All "$test_bundle_path"
    echo "Finished running tests with ios-sim"
else
    "${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests"
fi

现在,当我像以前一样运行相同的xcodebuild命令时,我得到了这个:

  

/ bin / sh -c   “\”/ Users / johnlussmyer / tu / ondeck / OnDeck / build / OnDeck.build / Debug(test   同步服务器)-iphonesimulator /单位   Tests.build/Script-4CECE52812D5043F0063EC6A.sh \“”ios-sim发布   / Users / johnlussmyer / tu / ondeck / OnDeck / build / Debug(测试   syncserver)-iphonesimulator --setenv   DYLD_INSERT_LIBRARIES = / .. / .. /库/ PrivateFrameworks / IDEBundleInjection.framework / IDEBundleInjection   --setenv XCInjectBundle = / Users / johnlussmyer / tu / ondeck / OnDeck / build / Debug(test   syncserver)-iphonesimulator / UnitTests.app --setenv   XCInjectBundleInto = /用户/ johnlussmyer / TU / ondeck / OnDeck /建造/调试   (测试同步服务器)-iphonesimulator / UnitTests.app --args -SenTest All   / Users / johnlussmyer / tu / ondeck / OnDeck / build / Debug(测试   syncserver)-iphonesimulator / UnitTests.app [DEBUG]会话不可能   已启动:错误域= DTiPhoneSimulatorErrorDomain代码= 1“未知   错误。“UserInfo = 0x7fcf04b03190 {NSLocalizedDescription =未知   错误。,DTiPhoneSimulatorUnderlyingErrorCodeKey = -1}完成运行   使用ios-sim进行测试

有关下一步尝试的建议吗?

2 个答案:

答案 0 :(得分:3)

从日志中,您似乎有几个错误的设置。正确的语法是:

ios-sim launch YourApp.app 
--setenv DYLD_INSERT_LIBRARIES=/../../Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection 
--setenv XCInjectBundle=YourTest.octest 
--setenv XCInjectBundleInto=YourApp.app/YourApp 
--args -SenTest All YourTest.octest

你可以看到

  1. 启动命令后,应用程序路径不正确
  2. XCInjectBundle应该是你的octest而不是app
  3. XCInjectBundleInto应该是您的应用程序二进制路径而不是app文件夹
  4. 最后一个参数也应该是你的octest
  5. 如果你在环境变量中看不到TEST_HOST,你可能需要通过它们来找到一些正确的,以使你的bash脚本正确。

答案 1 :(得分:0)

一个古老的问题..但是我在这里遇到了类似的问题。

我为OSX / iOS支付了2美分(在iOS13 / Catalina / Xcode 11下测试)。 (希望它可以对某人有所帮助。)

func underXCTest()->Bool{
    let environment = ProcessInfo.processInfo.environment
    if let _ = environment["XCInjectBundleInto"]{
        return true
    }
    return false
}

在测试中返回false。