【问题标题】:I have an Xcode static library project, how do I add a test target to it so I can run it there? (Instead of in a project that links to it.)我有一个 Xcode 静态库项目,如何向其中添加测试目标以便可以在那里运行它? (而不是在链接到它的项目中。)
【发布时间】:2011-03-02 08:36:29
【问题描述】:

我希望能够在库目标中测试库代码,这样我就不必切换到单独的项目来运行它。

我知道如何添加目标,但我不确定如何将其设置为像“命令行工具”项目模板那样运行。我尝试添加一个新的“Shell Tool”目标,但我不知道如何让它像一个目标一样运行。我必须向该目标添加哪些构建设置?启动它需要哪些文件(main.m?)?

编辑(从下方添加了我的 cmets,希望让问题更容易回答。)

我的库有两个目标,一个用于 iOS,一个用于 MacOS。到目前为止,我只将它包含在一个 iOS 项目中,所以这是我目前想要使用的项目。我尝试添加一个 Cocoa Touch Unit Test Bundle 目标,但我的构建失败并且我得到命令 /bin/sh/ failed with exit code 1 和 Failed testing for architecture 'i386' (GC OFF)。我不认为我想在 i386 上运行(至少不是为了测试我的 iOS 目标)而且我在目标设置中找不到任何说 i386 的内容。

我看到我的项目的活动架构是 i386(在项目 > 设置活动架构菜单中),但它不允许我在那里更改它。我的 TestApp 目标将 Standard (armv6) 作为架构集,我尝试搜索设置,但其中没有 i386。我该如何改变?

【问题讨论】:

    标签: cocoa xcode build static-libraries targets


    【解决方案1】:

    Mac OS X SDK 中有一个用于单元测试捆绑目标的模板。

    请注意,“bundle”是测试目标的构建产品:目标生成一个单元测试包。它不要求您的实际产品(库、应用程序等)是捆绑包;事实上,你的实际产品是什么并不重要。

    也就是说,当你有一个静态库时,你可以做一些不同的事情:

    1. 右键单击组树中的任何内容。从“添加”子菜单中,选择“新目标”。
    2. 在 Mac OS X 标题下,选择 Cocoa。在模板列表中向下滚动并选择 Unit Test Bundle。点击确定。
    3. 为您的单元测试捆绑目标命名。
    4. 将您的库构建产品(来自 Products 组)添加到您的单元测试捆绑目标的 Link Binary with Libraries 阶段。
    5. 在任何构建阶段之外,将您的库目标(来自 Targets 组)添加到您的单元测试包目标。这使它成为一个依赖项,因此测试包目标将在必要时重建库。
    6. 将您的活动目标设置为测试包目标。

    通常,您只需将待测代码的源代码文件添加到库目标和测试包目标中,但这样做也会测试您将测试包链接到库的能力。如果库有任何问题会阻止对其进行链接,这可能会检测到它们。

    【讨论】:

    • 我的库有两个目标,一个用于 iOS,一个用于 MacOS。到目前为止,我只将它包含在一个 iOS 项目中,所以这是我目前想要使用的项目。我尝试添加一个 Cocoa Touch Unit Test Bundle 目标并按照上述步骤操作。我的构建失败,我得到command /bin/sh/ failed with exit code 1Failed tests for architecture 'i386' (GC OFF)。我不认为我想在 i386 上运行(至少不是为了测试我的 iOS 目标)而且我在目标设置中找不到任何说 i386 的内容。
    • 我还尝试添加一个新的 iOS 应用程序目标(这对开发很有用,与单元测试分开),但我得到了 Failed to launch simulated application: Unknown error. 一个全新的目标。
    • 好的,我看到我的项目活动架构是i386(在Project > Set Active Architecture 菜单中),但它不允许我在那里更改它。我的 TestApp 目标将 Standard (armv6) 作为架构集,我尝试搜索设置,但其中没有 i386。我该如何改变呢?
    【解决方案2】:

    你能改变 Active Executable 吗? (在 Xcode 的 Project 菜单下:Set Active Executable)

    您的 Shell Tool 目标是否在其构建文件之一中包含 int main(int argc, char* argv[]) 函数?

    【讨论】:

    • 我想我真的很想拥有一个可以测试的 iPhone 应用程序目标,请参阅我的 cmets 附加到彼得的答案。
    【解决方案3】:

    对于 Mac,您可以添加新目标。选择命令行工具模板。

    【讨论】:

      【解决方案4】:

      在 XCode 9.1 中:

      • 点击File -> New -> Target...
      • 选择MacOS Unit Testing Bundle

      【讨论】:

        猜你喜欢
        • 2012-06-01
        • 2012-11-17
        • 1970-01-01
        • 2011-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-20
        • 2011-09-01
        相关资源
        最近更新 更多