我正试图深入探讨使用Xcode进行单元测试的非常可怕的世界(这似乎是一个错综复杂的过程。)
基本上我有这个测试类,试图测试我的Show.h类
#import <GHUnit/GHUnit.h>
#import "Show.h"
@interface ShowTest : GHTestCase { }
@end
@implementation ShowTest
- (void)testShowCreate
{
Show *s = [[Show alloc] init];
GHAssertNotNil(s,@"Was nil.");
}
@end
然而,当我尝试构建并运行我的测试时,它会因此错误而呻吟: -
未定义的符号:
“_ OBJC_CLASS _ $ _ Show”,引自:
__objc_classrefs__DATA@0 in ShowTest.o
ld:找不到符号
collect2:ld返回1退出状态
现在我假设这是一个链接错误。我尝试按照此处说明中的每一步操作: -
http://github.com/gabriel/gh-unit/blob/master/README.md
这些说明的第2步让我感到困惑: -
在目标'测试'信息窗口中,常规标签:
添加链接库,在Mac OS X 10.5 SDK部分下,选择GHUnit.framework
添加链接库,选择您的项目。
添加直接相关性,然后选择您的项目。 (这将导致您的应用程序或框架在测试目标之前构建。)
如果我的项目全部接受它.dylib,.framework和.o文件,我应该如何将我的项目添加到链接库列表?
答案 0 :(得分:7)
如果您要测试的目标是应用程序,则需要在主目标和测试目标中手动包含Show.h / m文件。
我还更新了README以反映这一点:
Test
项目中。 抱歉这个混乱!必须在两个目标中包含文件并不理想。
答案 1 :(得分:0)
@implementation
必须有Show
。
或者你可以使用
Show* s = [[objc_getClass("Show") alloc] init];
...
或
Show* s = [[NSClassFromString(@"Show") alloc] init];
...
在运行时解析类。
答案 2 :(得分:0)
不知何故,Apple的示例无需复制目标中的.m文件即可运行。
在此处下载Apple的单元测试示例代码(iPhoneUnitTests.zip):
http://developer.apple.com/IPhone/library/samplecode/iPhoneUnitTests/Introduction/Intro.html
单击CalcTests目标。只有CalcTests.m在此目标中。
构建目标。它为CalcAppDelegate或其他类构建时没有任何链接错误。
使这项工作变得神奇的是什么?