2014-02-13 6 views
0

У меня есть глупая проблема, я только начинаю с тестов на какао, и я хотел бы протестировать метод, который возвращает NSArray с NSRange в качестве элементов.Листинг NSRange в тестах?

XCTAssert(ranges[0].location == 500, @"Value found is wrong");

Это терпит неудачу, потому что расположение свойство не может быть найден на объект типа идентификатора, но я не могу бросить (NSRange) либо потому, что это структура.

Мой массив образец:

<__NSArrayM 0x600000050680>( NSRange: {500, 101} )

Как я могу сделать тестирование стоит для этого массива?

ответ

1

NSRange должен находиться внутри массива NSValue, поэтому вам нужно извлечь диапазон до того, как вы получите доступ к location.

NSValue *value = (NSValue *)ranges[0]; 
NSRange range = [value rangeValue]; 

XCTAssert(range.location == 500, @"Value found is wrong"); 
+0

Спасибо за исправление типографии @vikingosegundo :-) – Wain

3

Как NSRange не является Objective-C объект, вы не можете хранить их в класс коллекции Objective-C, поэтому они должны быть завернуты в NSValue объекта.

См. [NSValue valueWithRange:].

После того, как вы сделаете это, ваш тест становится:

XCTAssert([ranges[0] rangeValue].location == 500, @"Value found is wrong"); 

Или еще лучше, как вы можете видеть, как ожидаемые и фактические значения в журнале ошибок:

XCTAssertEqual([ranges[0] rangeValue].location, 500, @"Value found is wrong"); 
Смежные вопросы