Подтвердить что ты не робот

Нераспознанный селектор SenTestCase для категории

Я создал новый проект Cocoa Touch Static Library с модульным тестированием в 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"); 
}

Однако это приводит к сбою моих тестов (не сбой) с помощью "непризнанного селектора, отправленного экземпляру".

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

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

4b9b3361

Ответ 1

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

В настройках тестовой целевой сборки добавьте -ObjC к значению флага Linking/Other Linker.

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

Ответ 2

Изменить: обязательно этот ответ о unit test не найти файлы

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

В XCode 4

  • Нажмите "Поппи" в верхней части Навигатора
  • Выберите "PoppyTests" в разделе "Цели"
  • Переход к фазам сборки
  • Развернуть источники компиляции
  • Нажмите знак +, а затем добавьте NSString + Inflections.m

Затем вы должны получить что-то похожее:

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

Ответ 3

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

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

Как только я заменил CGSizeZero на CGSizeMake (0, 0), однако, второй подход работал отлично.

Ответ 4

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

1) Выберите цель проекта и goto.

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

введите описание изображения здесь

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