美文网首页iOSiOS开发记录我的ios进阶
Xcode:为你的项目集成单元测试(unit tests)时记得

Xcode:为你的项目集成单元测试(unit tests)时记得

作者: 没故事的卓同学 | 来源:发表于2015-11-23 23:38 被阅读8373次

    背景:项目已经创建大约两年,编程语言是常见的OC,项目里用到了cocoapods,也用到了swift,现在单元测试打算用swift语言(OC被抛弃只是时间问题)

    • 创建项目时记得勾选『include Unit Tests』



      在项目创建时如果直接选择了包含单元测试是最方便的了。xcode7中的UI自动测试已经很完善,建议『include UI Tests』也一起选上。

    • 已有项目,可以通过添加target的方式添加


    选择iOS Unit Testing Bundle


    在Test分类下选择
    • 添加测试文件
      在单元测试项目下,新建文件,选择source下的Unit Test Case Class。
      tips:如果几个test case都有一些共同的数据或逻辑,可以自己新建一个test case的基类,然后每个分别继承
    • 将要测试的module导入到test case中
      import完你需要测试的项目名称后,就可以在这个类里欢快的调用里面的类了
      <pre><code>@testable import YQImageCompress
      </code></pre>

    使用cocoapods的同学注意了

    在import完后很可能你的swift『Bridging-Header.h』桥接文件会报如下的错:
    <pre>failed to import bridging header</pre>
    或者
    <pre>SDWebImage/UIImageView+WebCache.h File Not Found Error</pre>
    可能你不愿接受这个现实,clean了项目,重新build,或者重启了计算机。在模拟器中运行你的项目时心里默念:刚才还是好好的啊,明明能正常运行,为什么有错误!
    是的。为此我已经抓掉了不少头发。
    原因是:unit tests是个单独的项目,所以一些项目配置必须重新配置一遍

    在编辑区中选择Tests项目,在build setting中配置
    因为swift的桥接文件很可能在你第一次创建swift类时xcode自动帮你配置了项目,你可能没有意识到build setting其实已经更改了。
    可以参照着自己项目的配置来重新配置一次。

    可以参考这个链接下的回答:http://stackoverflow.com/questions/26116288/failed-to-import-bridging-header

    cocoapods同理,其实已经默认帮你配置了不少search paths,自己手动贴进去吧,主要是下面这几个选项


    还差最后一步:Enable Testability

    一切类都配置到项目后又出现了这个错误:

    'Module was not compiled for testing'

    在原来的项目里配置Enable Testability为Yes


    现在你就真的可以愉快的在test case中快活的测试任意一个项目中的类了

    相关链接:
    http://stackoverflow.com/questions/30787674/module-was-not-compiled-for-testing-when-using-testable

    相关文章

      网友评论

      • AlwaysBlue:而且我还遇到了 如果工程中的swift文件里使用了OC的数据类型,比如CGFloat 那么在unit test中是无法识别的 这个问题要如何解决呢
      • AlwaysBlue:@testable import module 这个module是指的什么呢
      • zard0:有用!!!解决了我90%的问题,再加上我临门一脚,终于我的项目也能集成单元测试了。:smile:

      本文标题:Xcode:为你的项目集成单元测试(unit tests)时记得

      本文链接:https://www.haomeiwen.com/subject/ldhrhttx.html