Как написать модульный тест для определения местоположения с помощью ocUnit - PullRequest
2 голосов
/ 03 февраля 2011

В настоящее время я работаю с простым объектом, который содержит значения lat и lng как NSString. Но когда я пытаюсь утверждать, что они равны, я получаю провал с таким подходом

- (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 .6756668 'должно быть равно '41 .6756668' Фактическая широта местоположения была 41.6756668

Поэтому вместо этого я попробовал подход AssertTrue с «isEqual»

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

И я получаю ту же ошибку

ошибка: - [LocationParseJsonTest testLocationParseJson]: «[ожидается, локат.слат isEqual: actualLocation.lat]» должно быть истинным. Фактическая широта местоположения составила 41,6756668

Как мне сравнить эти значения NSString в ocUnit? Вот файл .h для Location fyi

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

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

@end

Ответы [ 2 ]

2 голосов
/ 10 февраля 2011

Окончательным решением этой проблемы 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 голос
/ 03 февраля 2011

Я считаю, что при сравнении строк NSS вы должны использовать метод isEqualToString для их сравнения.

Попробуйте:
STAssertTrue([expectedLocation.lat isEqualToString:actualLocation.lat], @"The actual location latitude was %@", actualLocation.lat);

РЕДАКТИРОВАТЬ: первый ответ в этот вопрос StackOverflow имеет несколько возможных объяснений, почему ваш путь не сработал.

...