XCTestCase 使用

作者: 次哩服莱 | 来源:发表于2018-08-15 14:37 被阅读0次

    新建测试文件

    例如 QRUtilsTest.swift

    15131598989190.jpg

    将目标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然后点击右边的运行小图标即可

    15131629112840.jpg

    最后

    当写了足够多的测试用例之后,就可以顺带着统计下而是用例的代码覆盖,这样有利于检测我们的测试用例是否将每个分支都覆盖了,是否所有的代码都在控制下。

    相关文章

      网友评论

        本文标题:XCTestCase 使用

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