ストリング拡張をテストするために、単純な単体テストを追加しました。しかし、失敗します。ここで私が間違っていることは何ですか?
私が知っていることから、XCTAssertEqual
はオブジェクト自体ではなく値をテストしていますか?
3行目は、文字列が等しいことを示していますが、XCTAssertEqual
は等しくないことを示しています。
- (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]);
}
XCTAssertEqual
のドキュメントから:
A1がa2と等しくない場合にエラーを生成します。 このテストは、Cスカラー、構造体、および共用体用です。
XCTAssertEqualObjects
を使用する必要があります(isEqual:
内部的に)または次のようなもの:
XCTAssertTrue([[firstNickName initialsFromString] isEqualToString:expectedResult],
@"Strings are not equal %@ %@", expectedResult, [firstNickName initialsFromString]);
私は誰かを助けるかもしれない同様の問題を抱えていました。
文字列を返すFloat拡張関数があります。次のテストは失敗します。
testValue = 0.01
XCTAssertEqual(testValue.formattedForCost(), "0,01 €")
次のメッセージとともに:
Assertions: XCTAssertEqual failed: ("Optional("0,01 €")") is not equal to ("Optional("0,01 €")")
それはかなり面倒です。しかし、 nicode no-break space character を使用するようにテストを変更した場合、私は発見しました。
XCTAssertEqual(testValue.formattedForCost(), "0,01\u{00a0}€")
通ります。