在Xcode 7.1中的UI测试中访问应用程序模块时出现链接器错误

law*_*cko 24 xcode linker ios xcode-ui-testing xcode7.1

我正在尝试在我的项目中实现一些UI测试.只要我保持简单,一切都很顺利:记录测试用例,添加一些断言,然后运行测试.这很好,但是当我尝试从我的测试中访问应用程序模块时,链接器会抛出一个错误(见下文):

在应用程序源文件中:

func foo() {
   assert(true)
}
Run Code Online (Sandbox Code Playgroud)

在UI测试中:

import XCTest
@testable import MyApp

func testExample() {
    foo()
}
Run Code Online (Sandbox Code Playgroud)

错误:

体系结构i386的未定义符号:"MyApp.foo() - >()",引用自MyAppUITests.o中的MyAppUITests.MyAppUITests.testExample(MyAppUITests.MyAppUITests)() - >()ld:未找到符号体系结构i386 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

架构x86_64的未定义符号:"MyApp.foo() - >()",引用自:MyAppUITests.o中的MyAppUITests.MyAppUITests.testExample(MyAppUITests.MyAppUITests)() - >()ld:找不到符号架构x86_64

我在这里报告了类似的问题:https: //forums.developer.apple.com/thread/20609 但没有解决方案.对我来说似乎@testable根本无法正常工作.developer.apple.com上的那个人试图通过在设置中添加Test Host和Bundle Loader来解决这个问题,但我不认为这是正确的方法.我认为@testable应该让一切都运转起来,而且现在看起来并不像.任何帮助赞赏!

Jin*_* Li 47

@testable import MainModule不会用于UI测试,虽然它可以启用代码完成(可能会让你觉得它有效).它目前仅用于单元测试.它会导致构建失败,例如:

ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

解决方法是将源代码文件添加到UI测试目标,然后它将开箱即用(即使没有@testable import).

文件检查器 - > 目标成员 - >检查UI测试目标(除主目标外)

希望Apple能尽快修复它,以便我们能够更清洁地使用它.


Sus*_*ant 6

UI 测试是独立于应用程序的模块,因此不会像逻辑测试那样在您的应用程序内运行。他们共享代码的唯一方法是编译您需要在两个模块之间共享的所有应用程序文件。查看此博客以了解如何实现这一目标,https://www.bignerdranch.com/blog/ui-testing-in-xcode-7-part-1-ui-testing-gotchas/

还在这里找到了一个雷达,https://openradar.appspot.com/23116258