Konrad77 Konrad77 - 1 month ago 30
Objective-C Question

XCTAssertEqual fails to compare two string values?

I added a simple unit test to test my string extension. But it fails. What I am I doing wrong here?

From what I know

XCTAssertEqual
is testing value and not the object itself?

The third line btw, says the string are equal, but
XCTAssertEqual
says they're not.

- (void) testInitialsFromFullname {
NSString *firstNickName = @"Mike Kain";
NSString *expectedResult = @"MK";
NSLog(@"Equal:%@", [[firstNickName initialsFromString] isEqualToString:expectedResult] ? @"YES" : @"NO");

XCTAssertEqual(expectedResult, [firstNickName initialsFromString], @"Strings are not equal %@ %@", expectedResult, [firstNickName initialsFromString]);
}

Answer

From the documentation of XCTAssertEqual:

Generates a failure when a1 is not equal to a2. This test is for C scalars, structs and unions.

You should use XCTAssertEqualObjects (which uses isEqual: internally) or something like:

XCTAssertTrue([[firstNickName initialsFromString] isEqualToString:expectedResult],
              @"Strings are not equal %@ %@", expectedResult, [firstNickName initialsFromString]);