如何为ios应用程序的bdd测试设置雪松?

时间:2012-05-03 23:36:26

标签: ios bdd cedar-bdd

我试图设置雪松并且难以让它工作。我试图按照github上的说明进行操作。

我正在使用xcode 4.2。

我不确定的第一步是:

"创建Cocoa Touch"应用程序"在项目中进行测试的目标。将此目标命名为UISpecs或类似名称。"

a)我不确定在使用雪松测试时是否能够将ARC用于我的主应用程序。 b)我很确定我无法使用ARC来制作雪松本身,我也不认为我想要。 c)我不确定我是否能够将ARC用于将包含我的规格的测试项目。 d)我不确定应该使用哪个应用程序模板来创建应用程序来存放规范。

我使用ARC和单一窗口应用程序模板创建了一个新的主应用程序。我使用空的应用程序模板创建了一个新的应用程序来存放我的规范而不使用ARC。

当我打开包含我的规格的测试应用程序的plist.info文件时,我没有看到"主nib文件基本名称"的选项。所以我忽略了这一步。

现在我来到这一步:

"将Cedar-iOS静态框架添加到您的项目中,并将UISpecs目标链接到它。"

所以我去了specs应用程序构建目标并将〜/ Library / Developer / Xcode / DerivedData / Cedar-borwneaogydgaodbtmfyaccykqxn / Build / Products / Debug-iphoneos / libCedar-StaticLib.a文件添加到&#下的项目中34;链接二进制文件与库" "构建阶段"下的选项卡标签

然后我将-ObjC,-lstdc ++和-all_load添加到UISpecs目标的Other Linker Flags构建设置中。

接下来,在包含规范的应用程序下,我创建了一个名为TestSpec.m的新文件并将此代码添加到其中,以试图获得失败的规范:

#import <Cedar/SpecHelper.h>

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

当我尝试在模拟器中运行specs项目时,我在使用ARC时遇到了一些关于alloc和autorelease不支持的错误。我想这意味着我的主要应用程序不能使用ARC,而我的规范应用程序则不能。我删除了我的规范应用程序并再次尝试,这次使用ARC。

我删除了自动释放池并从main.m代码中释放代码以符合ARC。

我现在遇到两个构建错误:

1)在main.m中:file://localhost/Users/nelsond/workspace/BIM360UIArchitecture/BIM360UIPrototype/BIM360Issues-IOS/BIM360Issues-IOS-Specs-ARC/main.m:error:Lexical或Preprocessor Issue:& #39;雪松-IOS /雪松-iOS.h&#39;文件未找到 2)在TestSpec.m中:file://localhost/Users/nelsond/workspace/BIM360UIArchitecture/BIM360UIPrototype/BIM360Issues-IOS/BIM360Issues-IOS-Specs-ARC/TestSpec.m:error:Lexical或Preprocessor Issue:&#39;雪松/ SpecHelper.h&#39;找不到文件

我很难接受下一步调试的内容。

2 个答案:

答案 0 :(得分:2)

a)您可以将ARC用作主应用目标。

b)不确定为什么要问这个问题,Cedar本身并不应该用ARC构建。无论如何,只需使用默认配置,无需弄乱。

c)你不应该在测试课程中使用ARC。

d)如果您创建一个新项目,则可以使用默认的自动生成的OCUnit目标。


我已经在我的iOS应用程序中使用了Cedar几个月了,我真的很喜欢它。

我在OCUnit中使用它,所以我可以点击Cmd+U来运行我的测试,并且我有一个特定的方案来从我的CI服务器运行它们。

我更喜欢创建一个git submodule来获取Cedar的代码,而无需编辑其文件。您只需将Cedar的Xcode项目拖到您应用的工作区即可。最好使用静态库。添加链接器标志,如您所述。您还需要告诉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)中的文件包含到测试文件中,它们可以很好地混合使用。有时候有点混乱,但相当强大。

希望这可以提供帮助。

答案 1 :(得分:0)

以下是我在iOS应用程序中集成Cedar时遇到的一些问题。

  1. “Cedar-iOS静态框架”似乎引用了以下文件夹:〜/ Library / Developer / Xcode / DerivedData / Cedar-borwneaogydgaodbtmfyaccykqxn / Build / Products / Debug-iphoneuniversal / Cedar-iOS.framework 。不是.a扩展名的那个。

  2. 我能够在没有任何问题的情况下启用ARC,因为静态框架已经编译而没有ARC。

  3. 我的info.plist
  4. 中也没有看到任何“主nib文件基本名称”键
  5. 第一段代码是我的测试目标的main.m(我需要通过查看我的主应用程序的main.m来修改它)
  6. 第二段代码是位于名为“MyAppDelegateSpec.mm”的文件中的规范代码

  7. #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
    
相关问题