2011-02-03 81 views
2

我目前正在處理一個簡單的對象,該對象將lat和lng值保存爲NSString。但是,當我試圖斷言他們是平等的,我得到一個失敗W /這種方法如何使用ocUnit編寫地理位置的單元測試

- (void) testLocationParseJson { 
    NSArray* items = //some array the represents the json returned from google ... 
    LocationParseJson* sut = [[LocationParseJson alloc] init]; 
    Location* actualLocation = [sut parseJson:items]; 

    NSString* actualLatitude = actualLocation.lat; 
    NSString* actualLongitude = actualLocation.lng; 

    STAssertEqualObjects(expectedLocation.lat, actualLocation.lat, @"The actual location latitude was %@", actualLocation.lat); 
} 

這裏顯示的錯誤

錯誤: - [LocationParseJsonTest testLocationParseJson]:'41 0.6756668' 應等於'41 0.6756668 「實際位置緯度是41.6756668

所以不是我試過AssertTrue辦法與‘的isEqual’

STAssertTrue([expectedLocation.lat isEqual: actualLocation.lat], @"The actual location latitude was %@", actualLocation.lat); 

而且我得到的同樣的錯誤

錯誤: - [LocationParseJsonTest testLocationParseJson]:「[expectedLocation.lat isEqual:actualLocation.lat]」應該爲true。實際的位置緯度是41.6756668

我應該如何比較這些在ocUnit中的NSString值?這裏是位置FYI

@interface Location : NSObject { 
    NSString* lng; 
    NSString* lat; 
} 

@property (nonatomic, retain) NSString* lng; 
@property (nonatomic, retain) NSString* lat; 

@end 
+1

你確定這兩個對象實際上是NSString的實例嗎?也許你應該擴展你的失敗消息來包含[expectedLocation.lat class]&[actualLocation.lat class]。 – retainCount 2011-02-03 01:17:20

+0

@retainCount你是勝利者先生,結果證明實際是NSDecimalNumber,預計是NSCFString ...所以我怎樣才能把它轉換成字符串呢?謝謝你,先生! – 2011-02-03 01:35:52

回答

2

此ocUnit問題的最終解決方案是創建一個NSDecimalNumber,並將使用STAssertTrue與isEqual進行比較。希望這可以幫助別人!

- (void) testLocationParseJson { 
    NSString* data = @"{\"name\":\"50035\",\"Status\":{\"code\":200,\"request\":\"geocode\"},\"Placemark\":[{\"id\":\"p1\",\"address\":\"Bondurant, IA 50035, USA\",\"AddressDetails\":{\"Accuracy\":5,\"Country\":{\"AdministrativeArea\":{\"AdministrativeAreaName\":\"IA\",\"Locality\":{\"LocalityName\":\"Bondurant\",\"PostalCode\":{\"PostalCodeNumber\":\"50035\"}}},\"CountryName\":\"USA\",\"CountryNameCode\":\"US\"}},\"ExtendedData\": {\"LatLonBox\": {\"north\": 41.7947250,\"south\": 41.6631189,\"east\": -93.3662679,\"west\": -93.5322489}},\"Point\":{\"coordinates\":[-93.4805335,41.6756668,0]}}]}"; 
    NSArray* items = [data JSONValue]; 

    NSDecimalNumber* expectedLat = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%@", @"41.6756668"]]; 
    NSDecimalNumber* expectedLng = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%@", @"-93.4805335"]]; 

    LocationParseJson* sut = [[LocationParseJson alloc] init]; 
    Location* actualLocation = [sut parseJson:items]; 

    STAssertTrue([expectedLat isEqual: actualLocation.lat], @"The actual location lat was %@", actualLocation.lat); 
    STAssertTrue([expectedLng isEqual: actualLocation.lng], @"The actual location lng was %@", actualLocation.lng); 
} 
1

.h文件,我相信比較NSString的時候,你應該使用isEqualToString方法對它們進行比較。

嘗試:
STAssertTrue([expectedLocation.lat isEqualToString:actualLocation.lat], @"The actual location latitude was %@", actualLocation.lat);

編輯:this StackOverflow question第一個答案有一些可能的解釋,爲什麼你的方式不起作用。