5

我正在使用 XCode 3.2.3 和 iOS 4.0 上的 OCUnit 对我的 iPhone 应用程序进行单元测试。我已成功设置测试环境以适当地通过和失败基本测试,但是当我导入自己的文件(在本例中为“UserAccount.h”)时,它无法编译并告诉我:

“_OBJC_CLASS_$_UserAccount”,引用自:

然后它说“找不到符号”。这让我觉得是某种链接器错误,但我不知道发生了什么。我已经多次构建和清理所有目标,但无济于事。这是我的测试代码:

#import "SomeTestCase.h"
#import "UserAccount.h"

@implementation SomeTestCase

 - (void)testUserAccount
 {
 // UserAccount.m //

 UserAccount *testAccount = [[UserAccount alloc] initWithUsername:@"" password:@"" deviceToken:@""];
 [testAccount registerNew];
 NSLog(@"USERID = %@", testAccount.userID);
 STAssertEquals([testAccount login], NO, @"Failure: Login should fail with blank username and password."); // should fail with no username or password

 UserAccount *testAccount2 = [[UserAccount alloc] initWithUsername:@"user" password:@"" deviceToken:@""]; 
 STAssertEquals([testAccount2 login], NO, @"Failure: Login should fail with blank password.");// should fail with no password

 UserAccount *testAccount3 = [[UserAccount alloc] initWithUsername:@"" password:@"pass" deviceToken:@""]; 
 STAssertEquals([testAccount3 login], NO, @"Failure: Login should fail with blank username.");// should fail with no password

 }

@end

任何建议将不胜感激。谢谢!

-马特

4

2 回答 2

3

至少在 XCode 4 中,您不应该测试目标中包含应用程序 .m 文件。正确的方法是:

  1. 您的项目(左上角)-> 目标-> 您的测试目标-> 目标依赖项-> + 您的主应用程序目标
  2. 切换到构建设置选项卡 -> 链接 -> Bundle Loader -> $(BUILT_PRODUCTS_DIR)/YourAppName.app/YourAppName

了解如何正确完成此操作的一个好方法是创建一个带有单元测试的全新 XCode 4 项目,然后查看测试目标是如何设置的。您会注意到应用程序 .m 文件未包含在测试目标中。

于 2011-06-19T18:14:17.357 回答
2

我猜想 UserAccount.m 尚未添加到测试目标中。这将导致“找不到符号”错误。我见过有多个目标的时候,即使实现文件不是目标的一部分,Xcode 也能识别标头。

如果这不起作用,请尝试使用 .清空 Xcode 缓存Xcode>Empty Caches...

于 2010-07-01T18:59:08.050 回答