在单元测试中使用iOS Worklight库

时间:2014-07-28 10:51:52

标签: ios unit-testing ibm-mobilefirst

我正在尝试在某些单元测试中使用Worklight iOS本机客户端库。我发现测试因以下断言而崩溃:

 XCTAssertNotNil([WLClient sharedInstance], @"wlclient shouldn't be nil");

使用以下stacktrace:

sharedTests.m:65: error: -[sharedTests testLogin] : (([WLClient sharedInstance]) != nil) failed: throwing "-[__NSDate getTime]: unrecognized selector sent to instance 0x2b5df90" - wlclient shouldn't be nil
2014-07-28 12:47:07.520 xctest[6456:303] -[__NSDate getTime]: unrecognized selector sent to instance 0x2953a90
<unknown>:0: error: -[sharedTests testLogin] : -[__NSDate getTime]: unrecognized selector sent to instance 0x2953a90
(
0   CoreFoundation                      0x00b251e4 __exceptionPreprocess + 180
1   libobjc.A.dylib                     0x007988e5 objc_exception_throw + 44
2   CoreFoundation                      0x00bc2243 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275
3   CoreFoundation                      0x00b1550b ___forwarding___ + 1019
4   CoreFoundation                      0x00b150ee _CF_forwarding_prep_0 + 14
5   sharedTests                         0x066e1e55 +[System currentTimeMillis] + 85
6   sharedTests                         0x066e672e -[DeviceContextPiggybacker init:] + 318
7   sharedTests                         0x066eb1ff -[DeviceImpl init:::::] + 927
8   sharedTests                         0x06718465 -[IOSWLDevice init] + 549
9   sharedTests                         0x06729907 -[WLClient init] + 951
10  sharedTests                         0x06729358 +[WLClient sharedInstance] + 120

想知道工作灯库是否需要特殊设置/拆卸,除了将必要的worklight.plist文件和Cookies.mom导入单元测试之外。

这只是iOS中的单元测试,除了工作灯之外没有任何依赖性。所以 - 步骤是

1:设置单元测试

2:包含worklight库

3:声明共享的worklight客户端在初始化时不是nil。

1 个答案:

答案 0 :(得分:0)

我已尝试运行Xcode project you've provided,但在其他错误上失败,所以我已完成以下操作,在我的情况下,它已成功通过。

项目:https://www.dropbox.com/s/c03mndpky0r8c10/UnitTestProject.zip

  1. 在Xcode中创建了一个新的单一视图应用程序
  2. 按照in the Hello World in Native iOS training module提供的说明进行操作 这包括添加:
    • WorklightAPI文件夹
    • 必需的框架
    • -ObjC flag
    • 等...(参见指南
  3. 打开* Tests.m文件并将以下内容添加到testExample函数中:

    XCTAssertNotNil([WLClient sharedInstance], @"wlclient shouldn't be nil");

  4. 选定产品&gt;测试
  5. 最终结果(注意绿色复选标记): enter image description here


    修改:我将您的项目与我的项目进行了比较,并且您的项目有明显遗漏。

    1. 编译时,会显示以下错误,这与您在问题中所写的内容完全不同:

        

      /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool:   -dynamic未指定以下标志无效:-ObjC错误:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool:   无法找到以下文件:-lWorklightStaticLibProjectNative error:   /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool:   file:-lWorklightStaticLibProjectNative不是目标文件(不是   在图书馆允许)

    2. 在构建设置中,您缺少其他链接标记中的-ObjC标记
    3. 还缺少以下链接二进制文件库:libc ++。dylib,UIKit.framework,CoreGraphics.framework。

      事实上,虽然文件夹“frameworks”包含其余部分,但它们并未在Linked Binary中与Libraries链接,所有这些都是。

    4. 我也很确定你没有创建新项目&gt;申请&gt;单一视图应用程序/否则,因为您的项目看起来像一个完全不同的项目 - 更像是而不是应用程序类型。
    5. 关于Worklight框架的项目文件夹结构是可疑的,它是嵌套的,但我认为可以保留。
    6. 在Build Phases中,缺少整个复制文件部分。
    7. 由于上述原因,我还没有设法让你的工作。我此时得出的结论是,它无法挽救。请重新开始。

      阅读培训模块并按照说明操作。确认它看起来像演示项目(我还重新上传它以包含丢失的文件)。