Ich habe einen einfachen Unit-Test hinzugefügt, um meine String-Erweiterung zu testen. Aber es scheitert. Was mache ich hier falsch?
Soweit ich weiß, XCTAssertEqual
ist der Testwert und nicht das Objekt selbst?
Die dritte Zeile sagt übrigens, dass die Zeichenfolge gleich ist, aber XCTAssertEqual
nicht.
- (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]);
}
objective-c
unit-testing
xctest
Konrad77
quelle
quelle
Antworten:
Aus der Dokumentation von
XCTAssertEqual
:Sie sollten verwenden
XCTAssertEqualObjects
(dieisEqual:
intern verwendet) oder etwas wie:XCTAssertTrue([[firstNickName initialsFromString] isEqualToString:expectedResult], @"Strings are not equal %@ %@", expectedResult, [firstNickName initialsFromString]);
quelle
-isEquals:
die ganze Zeit unter der Haube verwendet , aber fürNSString
-isEquals:
Ausführungen bekannt-isEqualToString:
. Zum Beispiel dieNSNumber
Implementierung von-isEquals:
Methodenverwendungen-isEqualToNumber:
.Ich hatte gerade ein ähnliches Problem, das jemandem helfen könnte.
Ich habe eine Float-Erweiterungsfunktion, die einen String zurückgibt. Der folgende Test schlägt fehl:
testValue = 0.01 XCTAssertEqual(testValue.formattedForCost(), "0,01 €")
Mit folgender Meldung:
Assertions: XCTAssertEqual failed: ("Optional("0,01 €")") is not equal to ("Optional("0,01 €")")
Welches ist ziemlich nervig. Ich habe jedoch festgestellt, dass ich meinen Test so ändere, dass das Unicode-Zeichen ohne Unterbrechung verwendet wird :
XCTAssertEqual(testValue.formattedForCost(), "0,01\u{00a0}€")
Es geht vorbei.
quelle
Zeichenfolgen vergleichen
- (void) testStringComparison { NSString *first = @"my string"; NSString *second = @"my string"; NSMutableString *firstMutable = [NSMutableString stringWithString:first]; //== comparing addresses of the objects(pointer comparison) //`first` and `second` has the same address it is a compiler optimization to store only one copy XCTAssertTrue(first == second); XCTAssertFalse(first == firstMutable); XCTAssertEqual(first, second); XCTAssertNotEqual(first, firstMutable); XCTAssertEqualObjects(first, firstMutable); XCTAssertTrue([first isEqualToString:firstMutable]); }
quelle