导入的文件无法在OCUnit中识别

时间:2010-07-01 17:24:00

标签: iphone unit-testing xcode linker ocunit

我正在使用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

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

-Matt

2 个答案:

答案 0 :(得分:3)

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

  1. 您的项目(左上) - >目标 - >您的测试目标 - >目标依赖关系 - > +您的主要应用目标
  2. 切换到构建设置标签 - >链接 - >捆绑装载机 - > $(BUILT_PRODUCTS_DIR)/YourAppName.app/YourAppName
  3. 了解如何正确完成的一个好方法是使用单元测试创​​建一个全新的XCode 4项目,然后查看测试目标的设置方式。您会注意到应用程序.m文件未包含在测试目标中。

答案 1 :(得分:2)

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

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