2013-08-18 3 views
1

Чтобы научить себя Objective C и Cocoa, я хочу написать инструмент diff. Я использую the Cedar testing framework, и я не могу на всю жизнь получить свой тестовый комплект для сборки.Ошибка компоновщика с тестами 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, который я перефразировал от the example on the 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 заявление неправильно? Неправильная структура папок? Я неправильно настроил свои объекты сборки?

Я нашел свою проблему on the Cedar wiki, которая предложила работать в режиме отладки, но насколько я могу разобраться, все уже настроено для работы в режиме отладки с настройками по умолчанию.

Извинения, если это идиотский вопрос. Это буквально первый код Objective C, который я когда-либо писал.

ответ

0

Я исправил проблему путем изменения параметров сборки для тестового пучка:

Bundle Loader: $(BUILT_PRODUCTS_DIR)/<App Name>.app/Contents/MacOS/<App Name> Test Хост: $(BUNDLE_LOADER)

0

Вы используете спецификацию?

Если это так, вы должны добавить файл, содержащий реализацию LongestCommonSubsequence, в целевой объект spec.

+0

Я использую связку, а не люкс. –