web-dev-qa-db-ja.com

XCTAssertEqualは2つの文字列値を比較できませんか?

ストリング拡張をテストするために、単純な単体テストを追加しました。しかし、失敗します。ここで私が間違っていることは何ですか?

私が知っていることから、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]);
}
65
Konrad77

XCTAssertEqualのドキュメントから:

A1がa2と等しくない場合にエラーを生成します。 このテストは、Cスカラー、構造体、および共用体用です。

XCTAssertEqualObjectsを使用する必要があります(isEqual:内部的に)または次のようなもの:

XCTAssertTrue([[firstNickName initialsFromString] isEqualToString:expectedResult],
              @"Strings are not equal %@ %@", expectedResult, [firstNickName initialsFromString]);
152
Arek Holko

私は誰かを助けるかもしれない同様の問題を抱えていました。

文字列を返す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}€")

通ります。

9
Leon