2013-10-19 14 views
56

Dize uzantımı test etmek için basit bir birim testi ekledim. Ama başarısız oluyor. Ne yapıyorum burada yanlış yapıyorum?XCTAssertEqual iki dize değerini karşılaştırmakta başarısız?

Bildiğim kadarıyla XCTAssertEqual nesnenin kendisini değil, değeri test ediyor?

Üçüncü satır btw, dizenin eşit olduğunu, ancak XCTAssertEqual olmadığını söylüyor. XCTAssertEqual belgelenmesi kaynaktan

- (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

Bu tamamen makul bir soruydu ve XCUnit ile ilk başladığımda aynı soruna rastladım. Kabul edilen cevap da yardımcı oldu. –

cevap

135

: a1, a2 eşit değilken

bir hata üretir. Bu test C skalar, yapı ve birlikler içindir.

Sen XCTAssertEqualObjects kullanmalıdır (dahilen isEqual: kullanır) ya da bir şey gibi:

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

Teşekkürler. Bu cevabı kabul ettim! – Konrad77

+4

XCTAssertEqualObjects() iki NSString nesnesi isEqualToString ile karşılaştırılırsa: otomatik olarak görünür. – jollyr0ger

+0

Her zaman başlık altında '-isEquals:' kullanır, ancak 'NSString' için -isEquals:' 'tanınmış' -isEqualToString: 'yürütür. Örneğin, '-isEquals:' metodunun 'NSNumber' uygulaması '-isEqualToNumber:' işlevini kullanır. – Ossir

5

Sadece birine yardımcı olabilecek benzer bir sorunu yaşadım.

Bir dize döndüren bir Float uzantısı işlevim var. Aşağıdaki test başarısız: Aşağıdaki mesaj ile

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

: oldukça rahatsız edici

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

.

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

Geçer: Ancak ben benim test unicode no-break space character kullanmak değiştirirseniz keşfetti.

+0

Kesinlikle bana yardımcı oldu, teşekkürler! –

İlgili konular