GHAssertThrowsSpecific не может найти тип NSRangeException - PullRequest
2 голосов
/ 18 июля 2011

Я использую Xcode 4 и GHUnit для написания некоторых модульных тестов в первый раз.Похоже, все советы предлагают использовать GHUnit, а не OCUnit.

У меня есть собственный объект коллекции под названием «myList», и я передаю сообщение, чтобы получить выборку на index:-1.Поэтому он корректно генерирует исключение NSRangeException (из базового изменяемого массива).

Я пытаюсь уловить это с помощью утверждения GHAssertThrowsSpecific.

Следующая строка кода не будет компилироваться, говоря «Неизвестный типname 'NSRangeException'.

GHAssertThrowsSpecific(s = [myList selectionAtIndex:-1],
            NSRangeException, @"Should have thrown an NSRangeException", nil);

Я #importing "Foundation/NSException.h", где NSRangeException, кажется, определен.Если я изменю его на:

GHAssertThrowsSpecific(s = [myList selectionAtIndex:-1],
            NSException, @"Should have thrown an NSException", nil);

, то компилируется нормально, и утверждение работает, так что это как-то связано с NSRangeException.

Если я загляну в заголовки, NSRangeException, по-видимому, определяется как NSString * const, и в этом случае как мне попытаться доказать, что я ожидаю его поймать.

Яочевидно, что я довольно тупой, потому что не вижу, что делаю неправильно.

1 Ответ

1 голос
/ 25 июля 2011

Хорошо, так что я нашел ответ на этот вопрос.

NSRangeException действительно просто указатель на строку, которая содержит «NSRangeException».

Вместо того, чтобы использовать GHAssertThrowsSpecific, я должен был использовать GHAssertThrowsSpecificNamed, который принимает дополнительный параметр строки именованного исключения, как показано ниже:

GHAssertThrowsSpecificNamed(s = [myList selectionAtIndex:-1],
  NSException, NSRangeException, @"Should have thrown an NSRangeException", nil);

Это работает.

...