新建测试文件
例如 QRUtilsTest.swift
将目标target
作为依赖import
进来
作为被测试的modelu
需要使用@testable
作为关键词修饰
@testable import QRainStock
开始写测试代码
被测试函数
举个例子,比如说我们需要测试的是下面这个函数
参数
这个函数的目的是将传入的字符串(默认是时间字串约定是iso8601的格式)
返回
返回是一个时间的简写,比如“刚刚” 、“1小时前”、 “1天前”等
func intervalSinceNow(theDate:String)->String
{
let dateOrigion = DateInRegion.init(string: theDate, format: .iso8601Auto)
let now = DateInRegion()
var sepreat2 = (now - dateOrigion!)
let interval :TimeInterval
//fix bug in swiftData as the have
if #available(iOS 9.0, *){
interval = now.absoluteDate.timeIntervalSince((dateOrigion?.absoluteDate)!)
sepreat2 = interval
}
let sepreat = sepreat2.in([.minute,.hour,.day])
if let day = sepreat[.day]{
if day > 1 {
return dateOrigion!.string(custom: "MM/dd")
}
if day != 0 {
return "\(day)天前"
}
}
if let hour = sepreat[.hour]{
if hour > 2{
return dateOrigion!.string(custom: "HH:mm")
}
if hour != 0 {
return "\(sepreat[.hour]!)小时前"
}
}
if let minute = sepreat[.minute]{
if minute != 0 {
return "\(sepreat[.minute]!)分钟前"
}
return "刚刚"
}
return dateOrigion!.string(custom: "MM/dd")
}
测试函数
根据入参可能存在的情况写各类单元测试函数,需要特别考虑入参为空的条件下程序是否可以正常运行
这里用到了一个时间库swiftDate
需要在.swift
文件内import
进去
import SwiftDate
//1.入参不存在 返回值为空字符串
func testintervalSinceNowEmpty(){
XCTAssertTrue(QRUtils.share.intervalSinceNow(theDate: "") == "")
}
//2.入参为10天前的数据 返回值为月日
func testintervalSinceNow10days(){
XCTAssertTrue(testIntervalSinceNow(ago: 10.day,ret: "MM/dd"))
}
//3.入参为1天前数据 返回值为1天前
func testintervalSinceNow1day(){
XCTAssertTrue(testIntervalSinceNow(ago: 1.day,ret: "1天前"))
}
//4.入参为3小时前的数据 返回时为HH:mm
func testintervalSinceNow3h(){
XCTAssertTrue(testIntervalSinceNow(ago: 3.hour, ret: "HH:mm"))
}
//5.入参为1小时前的数据 返回时为1小时前
func testintervalSinceNow1h(){
XCTAssertTrue(testIntervalSinceNow(ago: 1.hour, ret: "1小时前"))
}
//5.入参为30分钟前的数据 返回时为30分钟前
func testintervalSinceNow30m(){
XCTAssertTrue(testIntervalSinceNow(ago: 30.minute, ret: "30分钟前"))
}
//6.入参为30秒前的数据 返回时为刚刚
func testintervalSinceNow30s(){
XCTAssertTrue(testIntervalSinceNow(ago: 30.second, ret: "刚刚"))
}
func testIntervalSinceNow(ago:DateComponents,ret:String) -> Bool{
let daysago = DateInRegion() - ago
return QRUtils.share.intervalSinceNow(theDate: daysago.string(format: .iso8601Auto)) == daysago.string(custom: ret)
}
运行测试用例
测试面板
鼠标上浮至我们的目标测试用例QRUtilsTest
然后点击右边的运行小图标即可
最后
当写了足够多的测试用例之后,就可以顺带着统计下而是用例的代码覆盖,这样有利于检测我们的测试用例是否将每个分支都覆盖了,是否所有的代码都在控制下。