Ошибка компоновщика с кедровыми тестами
Чтобы научить себя Objective C и Cocoa, я хочу написать инструмент сравнения. Я использую платформу тестирования Cedar, и я не могу собрать свою тестовую базу.
XCode не представляет мне никаких предупреждений, пока я не нажму "запустить тесты", когда компоновщик выбрасывает свои игрушки из коляски. Точная ошибка, которую я получаю:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_LongestCommonSubsequence", referenced from:
objc-class-ref in LowestCommonSubsequenceTests.o
(maybe you meant: _OBJC_CLASS_$_LowestCommonSubsequenceTests)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Вот структура папок моего проекта:
Project: Diff
Diff
AppDelegate.h
AppDelegate.m
MainMenu.xib
LowestCommonSubsequence.h
LowestCommonSubsequence.m
Supporting Files
DiffTests
LowestCommonSubsequenceTests.mm
Rakefile
Cedar.framework
Supporting Files
Frameworks
Products
Вот мой первый тест в LowestCommonSubsequenceTests.mm
, который я перефразировал из примера на Cedar wiki:
#import "LowestCommonSubsequence.h"
using namespace Cedar::Matchers;
using namespace Cedar::Doubles;
SPEC_BEGIN(LowestCommonSubsequenceTests)
describe(@"When both input arrays are empty", ^{
it(@"should return an empty array", ^{
[LowestCommonSubsequence ofLeftArray:@[] andRightArray:@[]] should be_empty;
});
});
SPEC_END
Вот LowestCommonSubsequence.h
:
#import <Foundation/Foundation.h>
@interface LowestCommonSubsequence : NSObject
+ (NSArray *)ofLeftArray:(NSArray *)left andRightArray:(NSArray *)right;
@end
И вот LowestCommonSubsequence.m
:
#import "LowestCommonSubsequence.h"
@implementation LowestCommonSubsequence
+ (NSArray *)ofLeftArray:(NSArray *)left andRightArray:(NSArray *)right
{
return @[];
}
@end
У меня есть мой #import
утверждение неверно? Структура папки неверна? Я неправильно установил свои цели сборки?
Я обнаружил свою проблему в Cedar wiki, которая предлагала работать в режиме отладки, но, насколько я понимаю, все уже настроено для работы в режиме отладки с настройками по умолчанию.
Извиняюсь, если это идиотский вопрос. Это буквально первый код Objective C, который я когда-либо писал.
2 ответа
Я исправил проблему, изменив настройки сборки для тестового пакета:
Bundle Loader: $(BUILT_PRODUCTS_DIR)/<App Name>.app/Contents/MacOS/<App Name>
Тестовый хост: $(BUNDLE_LOADER)
Вы используете спецификацию?
Если это так, вы должны добавить файл, содержащий LongestCommonSubsequence
реализация к цели спецификации.