Imported files not recognized in OCUnit

折月煮酒 提交于 2020-01-13 10:11:05

问题


I am doing unit testing on my iPhone app using OCUnit on XCode 3.2.3, and iOS 4.0. I have successfully set up my testing environment to pass and fail basic tests appropriately, but when I import my own files (in this case, "UserAccount.h", it fails to compile and tells me:

"_OBJC_CLASS_$_UserAccount", referenced from:

It then says "Symbol(s) not found". This strikes me as some sort of linker error, but I have no idea what's going on. I have built and cleaned all targets numerous times, but to no avail. Here is my testing code:

#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

Any advice would be greatly appreciated. Thanks!

-Matt


回答1:


I would guess that UserAccount.m has not been added to the testing target. That will cause the "Symbols not found" error. I seen times with multiple targets in which Xcode recognizes headers even though the implementation file is not part of target.

If that doesn't work, try emptying the Xcode cache with Xcode>Empty Caches....




回答2:


In XCode 4 at least you should not include your application .m files in your test target. The proper way to do this is:

  1. Your Project (top left) -> Targets -> Your Test Target -> Target Dependencies -> + Your main app target
  2. Switch to Build Settings Tab -> Linking -> Bundle Loader -> $(BUILT_PRODUCTS_DIR)/YourAppName.app/YourAppName

A good way to see how this is properly done is to create a brand new XCode 4 project with unit tests and then see how the test target is setup. You'll notice the application .m files are not included in the test target.



来源:https://stackoverflow.com/questions/3160169/imported-files-not-recognized-in-ocunit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!