我在这里看了很多问题和答案,最终陷入了困境。
现在我对项目代码的状态很满意,我想实现单元测试。所以我添加了一个测试目标,我能让它正确编译吗?不..。我确信这是很简单的事情,但是我做不出来。
该项目包含2个第三方私人框架。
我的测试目标包加载器参数设置为:
$(TEST_HOST)我的测试目标测试主机参数设置为:
$(BUILT_PRODUCTS_DIR)/My App.app/Contents/MacOS/My App当我尝试编译时,我得到的错误如下:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_MyArrayController", referenced from:
objc-class-ref in SMyAppLogicTests.o我查了一下,找到的答案是这样的:XCTestCase: ld: symbol(s) not found for architecture x86_64
基本上就是说,我需要将类添加到测试目标中。这似乎有点违背了建立在正常工作的应用程序之上的观点,但这有什么关系。因此,我将所有.m文件添加到测试目标,它就会编译!万岁,但是,我有了新的问题:
Class MyClass is implemented in both /Users/georgebrown/Library/Developer/Xcode/DerivedData/My_App-akedavtbgqpujscilxqmhsvikcku/Build/Products/Debug/My App.app/Contents/MacOS/My App and /Users/georgebrown/Library/Developer/Xcode/DerivedData/My_App-akedavtbgqpujscilxqmhsvikcku/Build/Products/Debug/My App Tests.xctest/Contents/MacOS/My App Tests. One of the two will be used. Which one is undefined.这是有道理的,如果m个文件已经包含在我的应用程序中,为什么我还要把它们放进去。所以我查了一下,得到了一个让我回到第一个位置的答案:
我遗漏了什么?我已经被困了一周,仅仅是为了在Xcode中实现测试(更不用说Xcode服务器对我的服务器做了什么了,我仍然必须弄清楚),当我计划3-4天来编写测试时,愚蠢地认为这将是一个快速的设置。
编辑:我删除了我的测试目标并重新开始。第一件不起作用的事情是它找不到我的第三部分私有框架。因此,我在框架搜索路径中添加了$(PROJECT_DIR)。
接下来,我又开始为我的类获取架构错误的未定义符号。我注意到我的Bundle Loader未设置,所以我将其设置为$(TEST_HOST),现在测试运行了!万岁。
现在我不能为运行操作构建,但为测试构建工作.....我想是进步吧。我再次得到架构的未定义符号x86_64: error。
我已经设法修复了这个问题,方法是编辑方案,并为构建中的测试目标取消选择"Run“。我不确定我是否完全理解这个计划是如何工作的,然而,它做到了。
发布于 2015-01-26 22:09:59
XCTesting thingie的工作原理是在运行时将测试包注入应用程序。当您添加新的测试目标时,Xcode会为您设置所有这些内容:我建议,如果您有一个令您痛苦的测试目标,您可以在Xcode中创建一个新的测试目标,并将测试用例转移到该目标。那么你只需要遵循三条规则:
https://stackoverflow.com/questions/26463455
复制相似问题