Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Imported files not recognized in OCUnit

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

like image 791
mag725 Avatar asked Jul 01 '10 17:07

mag725


1 Answers

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.

like image 117
ToddH Avatar answered Sep 22 '22 19:09

ToddH