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
In XCode 4 at least you should not include your application .m files in your test target. The proper way to do this is:
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With