2013-10-19 13 views
56

Ho aggiunto un semplice test di unità per testare la mia estensione di stringa. Ma fallisce. Cosa sto facendo di sbagliato qui?XCTAssertEqual non riesce a confrontare due valori stringa?

Da quello che so XCTAssertEqual sta testando il valore e non l'oggetto stesso?

La terza riga btw, dice che la stringa è uguale, ma XCTAssertEqual dice che non lo sono.

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

Questa era una domanda perfettamente ragionevole, e mi sono imbattuto nello stesso problema quando ho iniziato con XCUnit. Anche la risposta accettata ha aiutato. –

risposta

135

Dalla documentazione di XCTAssertEqual:

Genera un errore quando A1 non è uguale ad A2. Questo test è per gli scalari, le strutture e i sindacati C .

Si dovrebbe usare XCTAssertEqualObjects (che utilizza isEqual: internamente) o qualcosa di simile:

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

Grazie. Ho accettato questa risposta! – Konrad77

+4

Sembra che se si XCTAssertEqualObjects() due oggetti NSString vengano confrontati con isEqualToString: automaticamente. – jollyr0ger

+0

Usa '-isEquals:' sempre sotto il cappuccio, ma per 'NSString'' -isEquals: 'esegue ben noto' -isEqualToString: '. Per esempio, l'implementazione di 'NSNumber' del metodo' -isEquals: 'usa' -isEqualToNumber: '. – Ossir

5

Ho appena avuto un problema simile che possa aiutare qualcuno.

Ho una funzione di estensione Float che restituisce una stringa. Il seguente test ha esito negativo:

testValue = 0.01 
XCTAssertEqual(testValue.formattedForCost(), "0,01 €") 

con il seguente messaggio:

Assertions: XCTAssertEqual failed: ("Optional("0,01 €")") is not equal to ("Optional("0,01 €")") 

che è piuttosto fastidioso. Tuttavia ho scoperto se cambio la mia prova di utilizzare il unicode no-break space character:

XCTAssertEqual(testValue.formattedForCost(), "0,01\u{00a0}€") 

Si passa.

+0

Sicuramente mi ha aiutato, grazie !! –

Problemi correlati