好吧,我花了大约5个小时试图解决这个问题。绝对没有过去的Stackoverflow主题解决方案对我有用,所以我希望有人可以给我一个答案,而不是一个疯狂的追逐。
问题:我有一个x-code项目,需要对我的自定义类进行单元测试。我在iOS SDK 4.2中使用X-Code 3.2.5。遵循几种不同的方法后,我无法对自定义类进行单元测试。使用Apple的例子可以正常工作。
自定义类是具有普通iVars的简单子类NSObject。我们称之为“Snookie”。
我已经尝试了几个可疑的解决方案,但是希望得到一个有完全相同问题的人的答复,答案是有道理的。
复制:
#import <SenTestingKit/SenTestingKit.h> #import <UIKit/UIKit.h> #import "Snookie.h" @interface SnookieTests : SenTestCase { Snookie *snookieObject; } @end
在新的测试用例类.m中,alloc / init snookie如下:
#import "SnookieTests.h" @implementation SnookieTests - (void) setUp { snookieObject = [[Snookie alloc] init]; } - (void) tearDown { [snookieObject release]; } @end
错误:
"_OBJC_CLASS_$_Snookie", referenced from:
Objc-class-ref-to-Snookie in SnookieTests.o
Symbol(s) not found
Collect2: Id returned 1 exit status
答案 0 :(得分:4)
链接器试图告诉您的是,它无法在@implementation
或其链接的任何框架/库中找到Snookie
类的MyAppTesting
。
添加MyApp
作为直接依赖是不足以告诉Xcode编译/链接MyApp
的代码。您需要将Snookie.m
文件明确添加到目标MyAppTesting
。
答案 1 :(得分:4)
将应用程序的.m文件直接添加到测试目标时,可以解决问题,但这是多余的,不必要的。关注the steps outlined here by Two Bit Labs以使其正常运行。总结一下,确保你的......
Bundle Loader
构建设置指向您应用的捆绑包。Test Host
构建设置指向您应用的捆绑包。Symbols Hidden by Default
构建设置为NO
。答案 2 :(得分:0)
kperryua是对的。
在XCode 5中,单击您要测试的类实现文件(例如XYZCustomClass.m),确保您可以看到Utilities屏幕(可以在View&gt; Utilities&gt; Show Utilities下显示,如果隐藏),然后选中目标成员资格框下的[您的测试名称]测试复选框。瞧,你的单位测试“OBJC_CLASS_ $ ...”,引自:objc-class-ref in。 。 ._Tests.o“错误信息将消失。