2013-10-19 15 views
56

文字列拡張をテストするための単体テストテストを追加しました。しかしそれは失敗する。私はここで間違っているのですか?XCTAssertEqualは2つの文字列値の比較に失敗しますか?

私が知っているからXCTAssertEqualはテスト値であり、オブジェクト自体ではありませんか?

3行目btwは、文字列は等しいと言いますが、XCTAssertEqualはそうではないと言います。 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]); 
} 
+2

これは完全に合理的な質問でした。最初にXCUnitを起動したときに同じ問題が発生しました。受け入れられた答えも助けになりました。 –

答えて

135

:A1はA2に等しくないとき

は、障害を生成します。 このテストは、C スカラー、構造体および共用体に対するものです。

あなたはXCTAssertEqualObjectsを使用する必要があります(これは内部的に使用していますisEqual:)か何かのように:

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

ありがとうございます。私はこの答えを受け入れた! – Konrad77

+4

XCTAssertEqualObjects()の2つのNSStringオブジェクトがisEqualToString:と自動的に比較されるようです。 – jollyr0ger

+0

フードの中で常に '-isEquals:'を使いますが、 'NSString'の' -isEquals: 'はよく知られている' -isEqualToString: 'を実行します。例えば、 '-isEquals:'メソッドの 'NSNumber'実装は' -isEqualToNumber: 'を使います。 – Ossir

5

私はちょうど誰かを助けるかもしれない同様の問題を持っていました。

私は文字列を返すFloat拡張関数を持っています。次のテストは失敗します。

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

むしろ迷惑です:次のメッセージで

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

を。

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

それが渡されます。しかし、私は私のテストはunicode no-break space characterを使用するように変更した場合に発見しました。

+0

間違いなく助けてくれてありがとう!! –

関連する問題