I'm trying to implement some UI tests in my project. Everything goes fine as long as I keep it simple: record the test case, add some asserts, then run the test. This works fine, however when I try to access the application module from inside my test, the linker throws an error (See below):
In the application source file:
func foo() {
assert(true)
}
In the UI tests:
import XCTest
@testable import MyApp
func testExample() {
foo()
}
Error:
Undefined symbols for architecture i386: "MyApp.foo () -> ()",
referenced from:
MyAppUITests.MyAppUITests.testExample (MyAppUITests.MyAppUITests)() -> () in MyAppUITests.o ld:
symbol(s) not found for architecture i386 clang: error: linker command
failed with exit code 1 (use -v to see invocation)
Undefined symbols for architecture x86_64: "MyApp.foo () -> ()",
referenced from:
MyAppUITests.MyAppUITests.testExample (MyAppUITests.MyAppUITests)() -> () in MyAppUITests.o ld:
symbol(s) not found for architecture x86_64
I have foud similar issue reported here:
https://forums.developer.apple.com/thread/20609
but no solution. Seems to me like the @testable
simply doesn't work correctly. The guy on the developer.apple.com tried to workaround by adding the Test Host and Bundle Loader in the settings, but I don't think this is the correct approach. I think the @testable
should just make everything work, and it doesn't look like it at the moment. Any help appreciated!
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…