Нераспознанный селектор SenTestCase для категории - PullRequest
12 голосов
/ 29 марта 2011

Я создал новый проект статической библиотеки Cocoa Touch с модульным тестированием в XCode 4 и добавил категорию:

// NSString+Inflections.h
@interface NSString (Inflections)
- (NSString *)pluralize;
@end

// NSString+Inflections.m
@implementation NSString (Inflections)
- (NSString *)pluralize { return self; }
@end

затем добавил соответствующий оператор импорта к моим тестам и написал следующий тест:

- (void)testPluralize
{
  NSString *test = @"person";
  NSString *expected = @"people";

  NSString *actual = [test pluralize];

  STAssertEqualObjects(actual, expected, @"Whoops"); 
}

Однако это приводит к сбою (не сбою) моих тестов с «нераспознанным селектором, отправленным экземпляру».

Как я могу проверить категорию внутри библиотеки?

Я сжал и загрузил полный проект здесь , если мое описание не подходит.

Ответы [ 4 ]

19 голосов
/ 28 марта 2013

Я сам искал ответ на эту проблему и нашел (я считаю) более простое решение, не требующее добавления ссылки в список источников компиляции всякий раз, когда в проект добавляется новый класс категории.

В настройках сборки объекта тестирования добавьте -ObjC к значению Linking / Other Linker Flags.

Дополнительное объяснение, почему эта ошибка происходит на самом деле, можно найти по адресу Справочник Apple .

13 голосов
/ 29 марта 2011

Редактировать: Обязательно посмотрите этот ответ о модульном тесте, не находящем файлы

+ 1 Для загрузки проекта.Проблема в том, что ваша тестовая цель не включает NSString + Inflections.m в фазах сборки.

В XCode 4

  1. Нажмите «Мак» в верхней части навигатора
  2. Выберите «PoppyTests» в разделе «Цели»
  3. Перейти к этапам сборки
  4. Развернуть источники компиляции
  5. Нажмите знак +, а затем добавьте NSString + Inflections.m

Затем вы должны получить нечто похожее на следующий вывод

TestSuite '/blahblah/PoppyTests.octest(Tests)' завершено в 2011-03-28 21:31:34+0000.Выполнен 1 тест с 1 отказом (0 неожиданным) за 0,000 (0,002) секунд

1 голос
/ 26 марта 2013

Я также могу подтвердить, что добавление необходимых файлов в коллекцию «Фазы сборки»> «Фазы сборки» в тестовом проекте решает эту проблему. Большое спасибо!

Однако, когда я попробовал подход -all_load, я начал получать кучу ошибок, например, _CGSizeZero не определен для архитектуры i386. Оказывается, что некоторый код - такой как этот, где я использую CGSizeZero в одном из моих классов - может нарушить второй подход.

Однако после того, как я заменил CGSizeZero на CGSizeMake (0, 0), второй подход также сработал.

0 голосов
/ 02 ноября 2016

У меня была такая же ситуация, когда я работал в проекте Objective-c. Я сделал следующие шаги, и все прошло хорошо.

1) Выберите проект и перейдите к цели.

2) выберите Test target и добавьте -ObjC, как показано на рисунке.

enter image description here

3) Теперь попробуйте запустить модуль XCTest.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...