2

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

首先我尝试使用这个:

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

那将运行编译,但测试没有运行。因此,在阅读了此处的其他解决方案之后,我安装了 ios-sim 并设置了我的目标以在之后运行此脚本:(请注意,我必须将出现的“TEST_HOST”替换为“CODESIGNING_FOLDER_PATH”,因为 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 命令时,我得到了这个:

错误域=DTiPhoneSimulatorErrorDomain 代码=1“未知错误。” UserInfo=0x7fcf04b03190 {NSLocalizedDescription=Unknown error., DTiPhoneSimulatorUnderlyingErrorCodeKey=-1} 使用 ios-sim 完成运行测试

关于下一步尝试什么的任何建议?

4

2 回答 2

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 应该是您的应用程序二进制路径而不是应用程序文件夹
  4. 最后一个参数也应该是你的 octest

如果您在环境变量中看不到 TEST_HOST,您可能需要通过它们找到一些正确的,以使您的 bash 脚本正确。

于 2013-04-03T08:16:38.787 回答
0

一个有点老的问题..但我在这里遇到了一些类似的问题。

我的 OSX/iOS 两分钱(在 iOS13/Catalina/Xcode 11 下测试)。(希望它可以帮助某人..)

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

正在测试中返回 false。

于 2019-10-11T08:45:41.237 回答