J'ai ajouté un test unitaire simple pour tester mon extension de chaîne. Mais ça échoue. Qu'est-ce que je fais mal ici?
D'après ce que je sais, XCTAssertEqual
teste la valeur et non l'objet lui-même?
La troisième ligne btw, dit que la chaîne est égale, mais XCTAssertEqual
dit que ce n'est pas le cas.
- (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]);
}
À partir de la documentation de XCTAssertEqual
:
Génère un échec lorsque a1 n'est pas égal à a2. Ce test concerne les scalaires C, les structures et les unions.
Vous devez utiliser XCTAssertEqualObjects
(qui utilise isEqual:
en interne) ou quelque chose comme:
XCTAssertTrue([[firstNickName initialsFromString] isEqualToString:expectedResult],
@"Strings are not equal %@ %@", expectedResult, [firstNickName initialsFromString]);
Je viens d'avoir un problème similaire qui pourrait aider quelqu'un.
J'ai une fonction d'extension Float qui renvoie une chaîne. Le test suivant échoue:
testValue = 0.01
XCTAssertEqual(testValue.formattedForCost(), "0,01 €")
Avec le message suivant:
Assertions: XCTAssertEqual failed: ("Optional("0,01 €")") is not equal to ("Optional("0,01 €")")
Ce qui est plutôt ennuyeux. Cependant, j'ai découvert que si je modifiais mon test pour utiliser le caractère d'espacement sans rupture unicode :
XCTAssertEqual(testValue.formattedForCost(), "0,01\u{00a0}€")
Ça passe.