Ошибка компоновщика с кедровыми тестами

Чтобы научить себя 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 реализация к цели спецификации.

Другие вопросы по тегам