“_OBJC_CLASS _ $ _ viewsampleViewController”,引自:

时间:2010-12-22 05:23:17

标签: iphone objective-c unit-testing

我创建了一个视图控制器viewsampleViewController ..它有两个方法setname和getname ..我为该视图控制器创建一个测试用例。我的testcase名称是newTestCase,方法名称是testName。

#import "newTestCase.h"
#import "viewsampleViewController.h"


@implementation newTestCase

在我的testName方法中,

-(void)testName{

 NSString *b=@"hello";
 v =[[viewsampleViewController alloc] init];
 STAssertNotNil(v,@"v doesnt created");
 [v setuname:@"hello"];
 NSString *a=[v getuname];

 STAssertEquals(b,a,@"error:name not equal");
 [v release];

}

-(void)setUp{
 v=[viewsampleViewController alloc];
}

-(void) tearDown{
 [v release];
}

当我构建时出现错误

 Ld "build/Debug-iphoneos/Unit test.octest/Unit test" normal armv6
cd /Users/anande/Documents/viewsample
setenv IPHONEOS_DEPLOYMENT_TARGET 3.1.3
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -arch armv6 -bundle -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.3.sdk -L/Users/anande/Documents/viewsample/build/Debug-iphoneos -F/Users/anande/Documents/viewsample/build/Debug-iphoneos -F/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.3.sdk/Developer/Library/Frameworks -filelist "/Users/anande/Documents/viewsample/build/viewsample.build/Debug-iphoneos/Unit test.build/Objects-normal/armv6/Unit test.LinkFileList" -dead_strip -framework Foundation -framework SenTestingKit -miphoneos-version-min=3.1.3 -o "/Users/anande/Documents/viewsample/build/Debug-iphoneos/Unit test.octest/Unit test"


Undefined symbols:
  "_OBJC_CLASS_$_viewsampleViewController", referenced from:
      __objc_classrefs__DATA@0 in newTestCase.o
ld: symbol(s) not found

collect2: ld returned 1 exit status

请帮助我,

5 个答案:

答案 0 :(得分:19)

由于架构依赖而出现链接器问题<​​/ strong>。实际上,当我们从其他来源向我们的项目添加一些文件时,可能会出现这种情况没有建立确切的依赖。所以编译器生成链接器错误。我通过以下步骤解决了这个问题:

  1. 选择目标
  2. 选择构建阶段
  3. 选择编译源
  4. 选择+图标
  5. 选择您收到错误的.m文件并添加。
  6. 清理构建并再次运行。

答案 1 :(得分:14)

这是一个链接器错误,将viewsampleViewController.m添加到您的测试目标。 请将您的类名称大写,使所有内容更具可读性

答案 2 :(得分:2)

以某种方式没有编译viewsampleViewController.m文件。确保它是项目的一部分。

答案 3 :(得分:0)

我遇到了同样的问题,在我对项目的来源做了一些改变。 所有的.m都改为.mm,由于某种原因,在'Link Binary With Libraries'中,没有添加有问题的特定类,但是在'Copy Bundle Resources'中。在我改变之后它起作用了。

所以这就是我所做的:

1)单击Xco​​de左上角的蓝色项目选项卡。 2)转到“TARGETS”选项。 3)转到“构建阶段”选项卡。 4)转到“复制捆绑资源”。 5)查找实现文件(.m,.mm),如果有,则单击减号( - )选项将其删除。 6)转到“编译源”并单击加号(+)选项并添加该实现文件。 7)编译并点击它,兄弟,你很高兴。

希望这会有所帮助。 欢呼声。

答案 4 :(得分:0)

将应用程序的.m文件直接添加到测试目标时可以解决问题,但这是多余的,不必要的。关注the steps outlined here by Two Bit Labs以使其正常运行。总结一下,确保你的......

  1. 测试目标的Bundle Loader构建设置指向您应用的捆绑包。
  2. 测试目标的Test Host构建设置指向您应用的捆绑包。
  3. app target的 Symbols Hidden by Default构建设置为NO