用于单元测试的GH-Unit Objective-C代码,为什么我会收到链接错误?

djh*_*rld 5 xcode linker unit-testing objective-c gh-unit

我正试图深入探讨使用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
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试构建并运行我的测试时,它会因此错误而呻吟: -

未定义的符号:

"_OBJC_CLASS _ $ _ Show",引自:

 __objc_classrefs__DATA@0 in ShowTest.o
Run Code Online (Sandbox Code Playgroud)

ld:找不到符号

collect2:ld返回1退出状态

现在我假设这是一个链接错误.我尝试按照此处说明中的每一步操作: -

http://github.com/gabriel/gh-unit/blob/master/README.md

这些说明的第2步让我困惑: -

在Tar​​get'Test'信息窗口中,常规选项卡:

添加链接库,在Mac OS X 10.5 SDK部分下,选择GHUnit.framework

添加链接库,选择您的项目.

添加直接依赖项,然后选择您的项目.(这将导致您的应用程序或框架在测试目标之前构建.)

当我所有接受它的.dylib,.framework和.o文件时,我应该如何将我的项目添加到链接库列表?

Gab*_*iel 7

如果您要测试的目标是应用程序,则需要在主目标和测试目标中手动包含Show.h/m文件.

我还更新了自述文件以反映这一点:

  • 如果您的主要目标是图书馆:添加链接库,并选择您的主要目标; 这样您就可以将测试目标与主目标链接起来,然后您不必在两个目标中手动包含源文件.
  • 如果您的主要目标是应用程序,则需要Test手动将这些源文件包含在项目中.

对困惑感到抱歉!必须在两个目标中包含文件并不理想.

  • 加布,还有其他办法吗?比如这样的http://stackoverflow.com/questions/6461074/linking-error-for-unit-testing-with-xcode-4,向两个目标添加源代码有点乱,我们必须牢记这一点每次我们添加一个新的源文件,我都不抱怨,只是好奇:) (2认同)