Search code examples
objective-cunit-testingxctest

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

Solution

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