您的位置: 首页 > 时尚 > 详情

即时看!iOS 单元测试

2023-05-09 21:41:52 来源:博客园


(相关资料图)

作用一名合格的程序员,得能文能武。写的了代码,也要写的了单元测试。单元测试步骤1.File -> New -> Target, 选择单元测试Target,创建成功如果项目是老项目,那需要手动创建一下UnitTest Target,如果项目里已经有了就忽略。2.创建一个swift工具的测试类CalculatorTests然后就可以在里面写单元测试用例了。单元测试常用知识点环境变量的管理setUp()测试开始前,初始化要使用的环境变量tearDown()测试结束后,清理使用的环境变量控制测试用例的执行顺序1.可以通过test+101这种形式,顺序会根据test后面的数字,先小,后大的顺序进行执行2.使用测试用例组的形式,执行顺序会按照组中的顺序,由上到下进行执行静态变量allTests中放置排序后的测试用例
static var allTests = [    testCase(CalculatorTests.testAddition),    testCase(CalculatorTests.testSubtraction)]

测试异步方法

使用XCTestExpectation测试异步方法
let expectation = XCTestExpectation(description: "HTTP request")expectation.fulfill()wait(for: [expectation], timeout: 5.0)
方法的性能测试使用tmeasure(metrics: [XCTMetric], block: () -> Void)做性能测试func measure(metrics: [XCTMetric], block: () -> Void)是 XCTest 中的一个方法,用于执行一段代码块并测量其执行时间。参数 metrics 是一个 XCTMetric 类型的数组,用于指定要测量的指标。当前支持的指标包括:wallClockTime:代码块执行的实际时间;userTime:代码块执行期间 CPU 时间花费的量;runTime:代码块执行期间系统运行时间的量。执行 measure 方法会启动一个计时器,在代码块执行完成后停止计时器并记录测量的指标值。可以在测试报告中看到测量结果。
import XCTest@testable import ARDemo//创建CalculatorTests类,继承自XCTestCaseclass CalculatorTests: XCTestCase {    var calculator: Calculator!    //测试开始前,初始化要使用的环境变量    override func setUp() {        super.setUp()        calculator = Calculator()    }    //测试结束后,清理使用的环境变量    override func tearDown() {        super.tearDown()        calculator = nil    }    //要控制测试用例的执行顺序    //1.可以通过test+101这种形式,顺序会根据test后面的数字,先小,后大的顺序进行执行    func test101Addition() {        let result = calculator.add(2, 3)        XCTAssertEqual(result, 5, "Addition of 2 and 3 should be 5")    }    func test102Addition() {        let result = calculator.add(2, 3)        XCTAssertEqual(result, 5, "Addition of 2 and 3 should be 5")    }    func test103Addition() {        let result = calculator.add(2, 3)        XCTAssertEqual(result, 5, "Addition of 2 and 3 should be 5")    }    //2.使用测试用例组的形式,执行顺序会按照组中的顺序,由上到下进行执行    func testAddition() {        let result = calculator.add(2, 3)        XCTAssertEqual(result, 5, "Addition result is incorrect")    }    func testSubtraction() {        let result = calculator.subtract(5, 2)        XCTAssertEqual(result, 3, "Subtraction result is incorrect")    }    //静态变量allTests中放置排序后的测试用例    static var allTests = [        testCase(CalculatorTests.testAddition),        testCase(CalculatorTests.testSubtraction)    ]    //测试异步方法    func testAsyncHTTPRequest() {        let expectation = XCTestExpectation(description: "HTTP request")                // 调用异步HTTP请求方法        asyncHTTPRequest { response in            // 处理回调结果            XCTAssertTrue(response.success)            expectation.fulfill()        }                // 等待异步操作完成        wait(for: [expectation], timeout: 5.0)    }    //测试功能的执行性能    func testPerformance() {        measure([.wallClockTime, .userTime]) {            // 执行需要测试性能的代码块        }    }}class Calculator {    func add(_ a: Int, _ b: Int) -> Int {        return a + b    }    func subtract(_ a: Int, _ b: Int) -> Int {        return a - b    }}
写完代码写一下单元测试还是挺有意义的,虽然面向测试编程虽然前期会影响一些进度,但会收获额外的东西1.对自己的代码充满信心2.直面测试的勇气3.节省回归测试的时间另外,在写单元测试用例的过程中,也会自己发现某些隐藏的Bug和不符合预期功能的方法,并调整不规范的代码设计。所以有条件的话还是要写一下单元测试。而且后续也可以在单元测试用例量达到一定程度后,可以搭建自动化测试后台,进行定时执行单元测试,发放测试报告。

标签:

上一篇:山东省服务台商“惠企暖心行动”启动仪式暨涉台在线诉调工作推进会在枣庄举行-每日快看
下一篇:天天观热点:教育部:大幅扩大科研助理岗位,吸纳应届毕业生就业