GH-единица для кода Objective C поблочного тестирования, почему я получаю соединение ошибок?

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

В основном у меня есть этот тестовый класс, пытаясь протестировать мой класс Show.h

#import 
#import "Show.h"
@interface ShowTest : GHTestCase { }
@end

@implementation ShowTest
- (void)testShowCreate
{
    Show *s = [[Show alloc] init];
    GHAssertNotNil(s,@"Was nil.");      
}

@end

Однако, когда я пытаюсь создать, и запускать мои тесты это стонет с этой ошибкой: -

Неопределенные символы:

"$ _OBJC_CLASS_ _Show", ссылаемый от:

 __objc_classrefs__DATA@0 in ShowTest.o

ld: символ (символы), не найденный

collect2: ld возвратил 1 статус выхода

Теперь я предполагаю, что это - связывающаяся ошибка. Я пытался выполнить каждый шаг в инструкциях, расположенных здесь: -

http://github.com/gabriel/gh-unit/blob/master/README.md

И шаг 2 этих инструкций смутил меня: -

В Целевом 'Тестовом' окне Info, вкладке "Общие":

Добавьте связанную библиотеку, под разделом Mac OS X 10.5 SDK, выберите GHUnit.framework

Добавьте связанную библиотеку, выберите свой проект.

Добавьте прямую зависимость и выберите свой проект. (Это заставит Ваше приложение или платформу создавать перед тестовой целью.)

Как я, как предполагается, добавляю свой проект к связанному списку библиотеки, когда все он принимает его .dylib, .framework и.o файлы?

5
задан ROMANIA_engineer 19 October 2017 в 17:50
поделиться

3 ответа

Если целевой объект, который вы тестируете, является приложением, вам необходимо вручную включить файлы Show.h / m как в основную цель, так и в тест. цель.

Я также обновил README, чтобы отразить это:

  • Если ваша основная цель - библиотека: добавьте связанную библиотеку и выберите основную цель; Это сделано для того, чтобы вы могли связать свою тестовую цель с основной целью, и тогда вам не нужно было вручную включать исходные файлы в обе цели.
  • Если ваша основная цель - приложение, вам нужно будет вручную включить эти исходные файлы в проект Test .

Приносим извинения за недоразумение! Необходимость включать файлы в обе цели - не лучший вариант.

7
ответ дан 14 December 2019 в 08:46
поделиться

Каким-то образом пример Apple работает без дублирования файлов .m в целевом объекте.

Загрузите образец кода для модульного тестирования Apple (iPhoneUnitTests.zip) здесь:

http://developer.apple.com/IPhone/library/samplecode/iPhoneUnitTests/Introduction/Intro.html

Щелкните цель CalcTests . В эту цель входит только CalcTests.m.

Постройте цель. Он строится без ошибок ссылок для CalcAppDelegate или других классов.

Какая магия заставляет это работать?

0
ответ дан 14 December 2019 в 08:46
поделиться

У вас должна быть @implementation для Show ].

Или вы можете использовать

Show* s = [[objc_getClass("Show") alloc] init];
...

или

Show* s = [[NSClassFromString(@"Show") alloc] init];
...

для разрешения класса во время выполнения.

0
ответ дан 14 December 2019 в 08:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: