用Swift语言做App开发之单元测试
作为一个有质量保障的应用程序,当然少不了单元测试;Swift开发的App也亦如此,此文将以一个简单的实例来介绍Swift中的单元测试。
这里我们使用XCode模版自带的XCTest框架,此框架包含了一个名为XCTestCase的类,所有的测试类都应该继承自它;按照约定俗成所有的测试方法名都应以test开头,并不能包含任何参数,只有这样,这些测试方法才能在运行测试时被自动执行;在每个测试方法里面,我们可以通过调用XCTAssert*函数去断言一个操作成功与否,如判等函数XCTAssertEqual、大于函数XCTAssertGreaterThan等;
话不多说,请先使用XCode创建一个iOS的Single View Application项目,并选择Swift作为开发语言。
大家可以看到创建完成后的目录结构应该是如此(这里我的项目名为TestDemo):
默认的模版会创建两个文件夹,一个和项目名同名(这里是TestDemo),用于放置App的主程序;另外一个则是“项目名+Tests”(这里是TestDemoTests),用于放置测试代码;
这里要注意的是,你要测试的类需要在Test中使用到,所以你在创建类文件时需要在Targets中同时选择TestDemo和TestDemoTests;
如我在主应用程序中添加一个名为Url的类:
创建完成后,录入代码:
class Url {
let baseUrl: String init(baseUrl: String) {
self.baseUrl = baseUrl
} func getActualPathFrom(resourcePath: String, segments: [String:String]) -> String {
var actualPath = resourcePath
for (key,value) in segments {
var segmentPlaceHolder = "{\(key)}"
actualPath = actualPath.stringByReplacingOccurrencesOfString(segmentPlaceHolder, withString: value, options: .LiteralSearch, range: nil)
}
return baseUrl + actualPath
}
}
然后在TestDemoTests文件夹下创建UrlTests文件,此时由于该类只需要在测试中才能用到,所以只需要在Targets选择TestDemoTests就可以了:
创建完成后,导入XCTest框架,并使该类继承自XCTestCase,然后录入测试代码:
import XCTest class UrlTests: XCTestCase {
var urlInstance = Url(baseUrl: "http://localhost:8080/api/") func testShouldGetCorrectPathWhenNoSegmentProvided() {
let resourcePath = "customers" let result = urlInstance.getActualPathFrom(resourcePath, segments: [String:String]()) XCTAssertEqual(result, "http://localhost:8080/api/customers", "Can not get corrent path when no segments provided")
} func testGetCorrectPathGivenOneSegment() {
let resourcePath = "customer/{id}" let result = urlInstance.getActualPathFrom(resourcePath, segments: ["id": "10"]); XCTAssertEqual(result, "http://localhost:8080/api/customer/10", "Can not get corrent path when only one segment provided")
}
}
最后Command+U执行测试
用Swift语言做App开发之单元测试的更多相关文章
- [Windows Phone] 以多国语言做为开发前提 (1)
原文:[Windows Phone] 以多国语言做为开发前提 (1) ? 前言 在先前 TechDays 2013 的课程 [开发 Windows Phone 商务应用程式就是这麽快] 中,其中一个部 ...
- [Windows Phone] 以多国语言做为开发前提 (2)
原文:[Windows Phone] 以多国语言做为开发前提 (2) ? 前言 在先前的文章 [Windows Phone 开发 - 以多国语言做为开发前提 (1)] 中说明了简单的多国语言范例,今天 ...
- golang学习笔记18 用go语言编写移动端sdk和app开发gomobile
golang学习笔记18 用go语言编写移动端sdk和app开发gomobile gomobile的使用-用go语言编写移动端sdk和app开发https://blog.csdn.net/u01249 ...
- Swift语言实战晋级
Swift语言实战晋级基本信息作者: 老镇 丛书名: 爱上Swift出版社:人民邮电出版社ISBN:9787115378804上架时间:2014-12-26出版日期:2015 年1月开本:16开页码: ...
- APP开发工具如何选?
随着技术的发展,在当前开发一款APP已经非常的简单和快速.特别是近些年,利用HTML5技术将APP的开发门槛进一步降低.各种开发工具和框架层出不穷,令人眼花缭乱.这么多的工具摆在眼前应该如何进行选择呢 ...
- APP开发:一个APP开发需要哪些技术人员?
亿合科技小编了解到:国民老公王思聪曾经在一个访谈中谈到过,如果他是一个普通人,他会选择移动互联网去创业,因为做个网站或者App开发门槛较低,做大做强的机会也比较多.小编觉得创业就是投资,重 ...
- 写给Android App开发人员看的Android底层知识(5)
(十)Service Service有两套流程,一套是启动流程,另一套是绑定流程.我们做App开发的同学都应该知道. 1)在新进程启动Service 我们先看Service启动过程,假设要启动的Ser ...
- 写给Android App开发人员看的Android底层知识(7)
(十二)ContentProvider (1)ContentProvider是什么? ContentProvider,简称CP. 做App开发的同学,尤其是电商类App,对CP并不熟悉,对这个概念的最 ...
- 深度讲解智能硬件手机APP开发流程
常州做APP开发公司紫竹云科技分析,智能硬件产品的软件开发,除了APP和后台之外还有一个固件端的开发,由于固件是要运行产品上的,不过此时的硬件也是刚开始进行研发,所以是无法提供硬件来运行固件的.因此在 ...
随机推荐
- winform中的确定取消
~~~~~~~~~~~ 今天也是醉了,做的项目找了很多地方也没有找到为什么点击确定取消,form会关闭(还是脑子不活) 加了一个小功能,代码没有什么难的但是,就是碰见了这么一个问题 点击 确定 取 ...
- C++STL -- vector实现
STL的vector简化实现 本质 vector说到底就是一个动态数组,我们需要做的就是管理动态数组的内存,和元素的增加,删除,移动等. template <typename T> cla ...
- 【Java】实战Java虚拟机之五“开启JIT编译”
今天开始实战Java虚拟机之五“开启JIT编译” 总计有5个系列 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实战Ja ...
- AnjularJS异步编程 Promise和$q
Promise,是一种异步处理模式. js代码的函数嵌套会使得程序执行异步代码时很难调试.因为多重嵌套的函数无法确定何时触发回调. 如: funA(arg1,arg2,function(){ func ...
- ajax 通用方法,从thinkphp中拔出来的
<?php /** * 设置页面输出的CONTENT_TYPE和编码 * @access public * @param string $type content_type 类型对应的扩展名 * ...
- Html中Table的简单使用
虽然Table布局已经过时,偶尔还是会用到,简要实用代码,如下: <table border="1" cellpadding="0" cellspacin ...
- 【jmeter】接口稳定性测试
1.创建进行测试的脚本 2.场景设置 线程组设置并发用户数30 在启动1s,30并发用户全部启动 循环设置为永远 采用调度器:有两种工作方式 1.设置启动和结束时间 2.设置持续时间,我设置的是60s ...
- ThinPHP命名空间,连接数据库是要修改的配置文件,Model数据模型层,跨控制器调用,如何获取系统常量信息,
一.命名空间(主要是为了实现自动加载类) *命名空间(相当于虚拟的目录),为了让类有一个统一的文件夹来管理(可以自动加载'类'),每个文件都要有命名空间*tp如何做命名空间:*TP框架下有一个初始命名 ...
- 转: git复制到非空目录
1. 进入非空目录,假设是 /workdir/proj1 2. git clone --no-checkout https://domain_or_ip/source.git tmp 3. mv tm ...
- chrome中hack解决input:-webkit-autofill自定义样式
在使用chrome浏览器设计网页时,想将input背景改成透明,也就是 background-color:transparent; 可是效果并不如人意 hack方法: input:-webkit-au ...