2012-05-03 3 views
0

Я пытаюсь настроить кедр и с трудом заставить его работать. Я пытаюсь следовать инструкциям на github.Как настроить кедр для тестирования bdd приложений ios?

Я использую xcode 4.2.

Первый шаг я не уверен, что это:

«Создание Cocoa Touch„Application“.. Цель для ваших тестов в проекте Название этой целевой UISpecs, или что-то подобное»

a) Я не уверен, могу ли я использовать ARC для моего основного приложения при тестировании с кедром. b) Я уверен, что не могу использовать ARC для создания кедра, и я не думаю, что хочу. c) Я не уверен, что смогу использовать ARC для проекта тестов, в котором будут размещаться мои спецификации. d) Я не уверен, какой шаблон приложения я должен использовать для создания приложения для размещения спецификаций.

Я создал новое основное приложение, использующее ARC и шаблон приложения для одного окна. Я создал новое приложение для размещения своих спецификаций без ARC, используя пустой шаблон приложения.

Когда я открываю файл plist.info для тестового приложения, в котором хранятся мои спецификации, я не вижу опции для «основного имени файла основного файла». Поэтому я игнорирую этот шаг.

Теперь я перехожу к шагу:

«Добавить статическую структуру Кедр-IOS для вашего проекта, и связать свою цель UISpecs с ним.»

Так что я пошел к цели построения функции приложения и добавил ~/Library/Developer/Xcode/DerivedData/Кедр-borwneaogydgaodbtmfyaccykqxn/Build/Products/Debug-iphoneos/libCedar-StaticLib.a файл в проект под " link binaries with libraries "на вкладке« фазы сборки ».

Затем я добавил -ObjC, -lstdC++ и -all_load в настройку компоновки других компоновщиков компоновки для цели UISpec.

Далее, по заявке, что дома спецификации, я создал новый файл с именем TestSpec.m и добавил этот код к нему, в попытке получить неудовлетворительные спецификации:

#import <Cedar/SpecHelper.h> 

SPEC_BEGIN(FooSpec) 
describe(@"Foo", ^{ 
    it(@"should do something", ^{ 
     expect(0).to(equal(1)); 
    }); 
}); 
SPEC_END 

Когда я попытался запустить проект specs в симуляторе, я получил некоторые ошибки в отношении alloc и autorelease, которые не поддерживаются при использовании ARC. Я полагаю, это означает, что мое основное приложение не может использовать ARC, в то время как мое приложение спецификации не работает. Я удалил приложение спецификации и повторил попытку, на этот раз используя ARC.

Я удалил пул авторефератов и выпустил код из кода main.m, чтобы соответствовать ARC.

я теперь получить две ошибки сборки:

1) в main.m: файл: // локальный/Users/nelsond/рабочее пространство/BIM360UIArchitecture/BIM360UIPrototype/BIM360Issues-КСН/BIM360Issues-IOS-функции-ARC/main.m: ошибка: проблема с лексикой или препроцессором: файл Cedar-iOS/Cedar-iOS.h не найден 2) в TestSpec.m: файл: // localhost/Users/nelsond/workspace/BIM360UIArchitecture/BIM360UIPrototype/BIM360Issues -IOS/BIM360Issues-IOS-Specs-ARC/TestSpec.m: ошибка: проблема с лексикой или препроцессором: файл «Cedar/SpecHelper.h» не найден

Я довольно озадачен тем, что отлаживать дальше.

+0

Что такое «кедр»? Есть только 40 сообщений с меткой «кедр», и это в основном о облачной платформе Heroku. Ваш пост не о Героку. –

+0

«Cedar - это базовая платформа тестирования Objective-C в стиле BDD». Источник: https://github.com/pivotal/cedar –

ответ

0

Вот некоторые моменты, которые я столкнулся при интеграции Cedar в приложении iOS.

  1. "Кедр-IOS статические рамки", кажется, относится к следующей папке: ~/Library/Developer/Xcode/DerivedData/Кедр-borwneaogydgaodbtmfyaccykqxn/Build/Products/Debug-iphoneuniversal/Кедр-iOS.framework , Не тот, у кого есть расширение .a.

  2. Я смог включить ARC без каких-либо проблем, поскольку статическая структура уже скомпилирована без ARC.

  3. я тоже не видел «Главный СИБ имя файла базы» ключ в моей info.plist
  4. Первая часть кода моя main.m для тестовой цели (мне нужно изменить его, посмотрев на мой main.m основного приложения)
  5. Вторая часть кода в спецификации код, который находится в файле с именем "MyAppDelegateSpec.mm"

#import <UIKit/UIKit.h> 

int main(int argc, char *argv[]) { 
    @autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([CedarApplicationDelegate class])); 
    } 
} 

#import "MyAppDelegate.h" 
#import <Cedar-iOS/SpecHelper.h> 

using namespace Cedar::Matchers; 

SPEC_BEGIN(MyAppDelegateSpec) 

describe(@"MyAppDelegate",^{ 
    __block MyAppDelegate *appDelegate; 
    beforeEach(^{ 
     appDelegate = [[MyAppDelegate alloc] init]; 
     [appDelegate application:nil didFinishLaunchingWithOptions:nil]; 
    }); 

    afterEach(^{ 
     appDelegate = nil; 
    }); 

    it(@"initializes window", ^{ 
     expect(appDelegate.window != nil).to(be_truthy()); 
    }); 
}); 
SPEC_END 
2

a) вы можете использовать ARC для своей основной цели приложения.

b) не уверен, почему вы спрашиваете об этом, сам кедр не должен строиться с помощью ARC. Во всяком случае, просто используйте конфигурацию по умолчанию, не нужно возиться с этим.

c) вы не должны использовать ARC для своих тестовых классов.

d) если вы создаете новый проект, вы можете использовать автогенерированную цель OCUnit по умолчанию.

Я использую кедр с приложениями iOS в течение нескольких месяцев, и мне это очень нравится.

Я использую его с OCUnit, поэтому я могу просто нажать Cmd+U, чтобы запустить мои тесты, и у меня есть конкретная схема для запуска их с моего CI-сервера.

Я предпочитаю создавать git submodule, чтобы получить код Cedar без редактирования его файлов. Вы можете просто перетащить проект Xcode Cedar в рабочее пространство вашего приложения. Лучше всего использовать статическую библиотеку. Добавьте флаги компоновщика, как вы описали. Вам также нужно указать Xcode, где найти файлы заголовков (User Header Search Paths, с чем-то вроде "$(PROJECT_DIR)/Libraries/cedar/Source/Headers"). Теперь вы должны быть готовы к работе.

Отключить ARC (см. How can I disable ARC for a single file in a project?) для моих тестовых классов. Обратите внимание, что конфигурация ARC действительно зависит от файлов, поэтому вы можете включать файлы из вашей основной цели (с ARC) в ваши тестовые файлы, они будут прекрасно сочетаться. Немного смущает иногда, но довольно мощно.

Надеюсь, это поможет.

Смежные вопросы