[译][祖传] 2017 Swift 单元测试文章资源精华

2018 年 1 月 14 日 CocoaChina 没故事的桌同学


原文地址:A complete list of articles on Unit Testing with Swift from 2017

原文需翻墙。


无论你写不写测试,Swift 在社区的普及度已经越来越高。过去一年社区里涌现了很多基于 Swift 的测试相关文章资源。下面我把我收集到的很大家分享一下。


在测试之前应该了解的事情


Engineering for Testability


如果你以前没有写过单元测试,那么强烈建议你先看下这个 WWDC 17 上的视频。在这个视频了介绍了写出可以被测试的代码的重要性。并且一步步演示了如何给模块解耦。同时也展示了很多给 app 建模和写单元测试的技巧。从这个视频了解单元测试会是一个很好的开端。


iOS Unit Testing and UI Testing Tutorial


这是一篇非常好的介绍如何用 Swift 写测试的 guide 。介绍了几个很核心的内容,比如如何在 Xcode 里配置单元测试,如何 mock 数据对象。同时也介绍了一些进阶的单元测试概念,比如性能测试和测试覆盖率。


Stylish Developers Guide to Unit Testing in Swift


我应该在什么时候开始写测试代码?Jaim Zuber 在演讲里解释了在项目里引入测试的好处。当然也一步步演示了如何在实际项目中写测试。如何测试 ViewControllers 、如何测试 Storyboard、如果没有 mock 测试要如何进行,这些问题都能在演讲里找到答案。


TDD in Xcode Playgrounds


对 XCTest 不熟悉?害怕引入单元测试把项目搞乱?你也可以通过 playground 开始。在这个视频里,Paul Ardeleanu 会演示在 playground 里写几个简单的 XCTest case 。你一定能看懂,即使你没听说过 TDD 。


The complete guide to Network Unit Testing in Swift


现在你知道如何为模块解耦,如何写 XCTestCase。然而你可能还是会困惑如何把这些技术应用在实践里。这篇教程介绍了广泛使用的解耦技巧:依赖注入(Dependency Injection)。解释了如何利用 DI 和 Swift protocol 去解耦网络层服务,如何给服务写测试。


Testing iOS Apps


从某个角度来说很难完全掌握写测试的技巧:要记住有太多的规则和模式。不过你也不用一口气都学会这些。Krzysztof Zabłocki 列出了在你刚开始写测试时需要注意的通用的概念和规则。记住这些准则,你就能写出易维护的测试,并且长期受益。


Singleton, Service Locator and tests in iOS


Bohdan Orlov 比较了两个经常被滥用的模式: Singleton 和 Service Locator。并且指出了为什么两个模式经常被滥用。也提供了基于两种方式更优雅的写单元测试的方式。对于解耦和重构老代码非常实用。


专业测试三十年


Testing an Untested App


如果你运气好,整个项目都是你自己从零开始写的。然而更多的时候你必须做一些团队协作的工作,review 和修改一些别人的代码。在这样的情况下,我们要怎么给这些项目写测试呢?在这个视频里,Michael May 和你一起做了一次现场 review 。他重构了一个老的项目,并且细致的解释了每行的重构思路。


Common unit testing techniques on iOS


学习技术并且不断的练习是成为一个高级程序员的关键。


Swift 没有一个 mocking 的框架,因为受限于语言的动态能力,纯 Swift 对象的实现代码不能被改变。


Luciano Marisi 会告诉你如何达到这个目的。你会看到很多非常实用的技术。这些好用的模式在你写测试的过程中会经常被用到。


Test Doubles In Swift


如果测试的对象有第三方依赖,引入第三方依赖就会加大测试的复杂度。所以模拟一份依赖的复制可以是测试变的简单。这种代替依赖的物体叫做 Test Double(Google Testing Blog)。本文介绍了几种创建 test double 的技术。


Waiting in XCTest


在软件开发中处理异步请求是家常便饭。Xcode 提供了很多类让我们处理等待事件。本文对 XCTestExpectation 进行了全面的介绍。同时也介绍了使用过程中遇到的坑。让你能够完美的写出针对异步请求的测试。


Cracking the Tests for Core Data


很多人对怎么样给 Core Data 写测试完全没概念。在这篇文章里,会简要的介绍针对 Core Data 的测试技巧,包括在内存中的数据库和 DI 。如果你用 Core Data 作为存储层,但是不知道如何测试。这篇文章会告诉你答案。


Xcode unit tests with ⌘+S


在一个很大的项目里跑测试会因为需要 rebuild 项目而花费很多时间。John Holdsworth 有一个很酷的神器:InjectionTDD 。InjectionTDD 会注册新的实现而不需要重新编译整个项目。Bartosz Polaczyk 会一步步演示如何使用 InjectionTDD。


祖传秘籍


Time traveling in Swift unit tests


有的时候我们的代码会依赖于时间(比如缓存的有效期是两天)。但是在写测试的时候很难模拟时间的变化。John Sundell 介绍了他如何进行“时空穿梭”来测试。


Reducing flakiness in Swift tests


测试代码也是代码。所以依然要在意测试的代码的质量。这篇文章会告诉你如何避免在测试代码中引入混乱。分享的三个 tip 在实际工作场景中都非常实用。


Tests that don’t crash


通常我们会觉得在测试的时候发生闪退没什么影响。因为不经常发生而且也不会影响到实际用户。然而却会影响到持续集成的流程:出现异常后面的测试就不会被执行了。Tim Vermeulen 展示了如何轻巧的解决这个问题,并且如何使异常展示的更加友好。


Testing and mocking without OCMock


你是否使用 OCMock ?没有 OC 的动态优势的 Swift 要如何 mock 呢? Jesse Squires 介绍了另外一种方式来解决这个问题。


Making Mock Objects More Useful


一旦你开始在实际项目中开始写测试,你就发现设计 mock 对象并不像那些入门教程里说的那么简单。实际上 mock 也和软件产品一样:他们应该可以被重用并且易维护(be reusable and maintainable)。OCMockito 的作者,Jon Reid 介绍了他在 mocking 对象的实践经验。介绍了很多实用的技术,对写出高质量的 mock 和提高效率有很大帮助。


还有这种操作


Using protocol compositon for dependency injection


如果有好几个依赖注入(DI)到单一实体上会显得很笨重。Krzysztof Zabłocki 展示了另外一种操作:用合成 protocol 。


iOS Cookies — The Testing Section


iOS Cookies 收集了很多高质量的 Swift 库。测试相关的这些库不要错过🍻。


Arek Holko 告诉你一个写测试不可不知的小技巧



总结


作为一个刚入门的开发者,没有一个 mentor 面对面教过我如何写单元测试。然而感谢 Swift 社区,可以有这么多充满价值的资料可以让我去学习。


欢迎关注我的微博:@没故事的卓同学

掘金博客地址:https://juejin.im/user/5624c86b60b2b199f7611227

如果想与我有更密切的交流也可以加入我的小密圈:程序员生存指南


登录查看更多
0

相关内容

苹果公司在 WWDC 2014 开幕 Keynote 上发布的全新编程语言,具有更多现代化特性,同时容易使用,定位是补充 Objective-C. > Swift is an innovative new programming language for Cocoa and Cocoa Touch. Writing code is interactive and fun, the syntax is concise yet expressive, and apps run lightning-fast. Swift is ready for your next iOS and OS X project — or for addition into your current app — because Swift code works side-by-side with Objective-C.

Swift - Apple Developer

【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
《代码整洁之道》:5大基本要点
专知会员服务
49+阅读 · 2020年3月3日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
【电子书】Flutter实战305页PDF免费下载
专知会员服务
20+阅读 · 2019年11月7日
开源书:PyTorch深度学习起步
专知会员服务
49+阅读 · 2019年10月11日
Python用于NLP :处理文本和PDF文件
Python程序员
4+阅读 · 2019年3月27日
春招已近,这份GitHub万星的ML算法面试大全请收下
全球人工智能
4+阅读 · 2019年2月22日
资源 | 开源数据集
AI研习社
8+阅读 · 2018年9月25日
资源 | 25个深度学习开源数据集
人工智能头条
4+阅读 · 2018年4月22日
资源 | 25个深度学习开源数据集,have fun !
数据分析
4+阅读 · 2018年4月12日
无需一行代码就能搞定机器学习的开源神器
人工智能头条
6+阅读 · 2017年11月7日
【推荐】GAN架构入门综述(资源汇总)
机器学习研究会
10+阅读 · 2017年9月3日
十五条有用的Golang编程经验
CSDN大数据
5+阅读 · 2017年8月7日
Do RNN and LSTM have Long Memory?
Arxiv
19+阅读 · 2020年6月10日
AliCoCo: Alibaba E-commerce Cognitive Concept Net
Arxiv
13+阅读 · 2020年3月30日
Arxiv
7+阅读 · 2018年6月1日
Arxiv
3+阅读 · 2018年5月28日
Arxiv
5+阅读 · 2016年1月15日
VIP会员
相关VIP内容
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
《代码整洁之道》:5大基本要点
专知会员服务
49+阅读 · 2020年3月3日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
【电子书】Flutter实战305页PDF免费下载
专知会员服务
20+阅读 · 2019年11月7日
开源书:PyTorch深度学习起步
专知会员服务
49+阅读 · 2019年10月11日
相关资讯
Python用于NLP :处理文本和PDF文件
Python程序员
4+阅读 · 2019年3月27日
春招已近,这份GitHub万星的ML算法面试大全请收下
全球人工智能
4+阅读 · 2019年2月22日
资源 | 开源数据集
AI研习社
8+阅读 · 2018年9月25日
资源 | 25个深度学习开源数据集
人工智能头条
4+阅读 · 2018年4月22日
资源 | 25个深度学习开源数据集,have fun !
数据分析
4+阅读 · 2018年4月12日
无需一行代码就能搞定机器学习的开源神器
人工智能头条
6+阅读 · 2017年11月7日
【推荐】GAN架构入门综述(资源汇总)
机器学习研究会
10+阅读 · 2017年9月3日
十五条有用的Golang编程经验
CSDN大数据
5+阅读 · 2017年8月7日
相关论文
Top
微信扫码咨询专知VIP会员