XCTAssertEqual fails to compare two string values?

Konrad77 picture Konrad77 · Oct 19, 2013 · Viewed 35.2k times · Source

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

Arek Holko picture Arek Holko · Oct 19, 2013

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]);