如何使用ocUnit编写地理位置的单元测试
我目前正在处理一个简单的对象,该对象将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
此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);
}
.h文件,我相信比较NSString的时候,你应该使用isEqualToString
方法对它们进行比较。
尝试:STAssertTrue([expectedLocation.lat isEqualToString:actualLocation.lat], @"The actual location latitude was %@", actualLocation.lat);
编辑:this StackOverflow question第一个答案有一些可能的解释,为什么你的方式不起作用。
你确定这两个对象实际上是NSString的实例吗?也许你应该扩展你的失败消息来包含[expectedLocation.lat class]&[actualLocation.lat class]。 – retainCount 2011-02-03 01:17:20
@retainCount你是胜利者先生,结果证明实际是NSDecimalNumber,预计是NSCFString ...所以我怎样才能把它转换成字符串呢?谢谢你,先生! – 2011-02-03 01:35:52