经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » iOS » 查看文章
iOS 单元测试
来源:cnblogs  作者:滴水微澜  时间:2023/5/10 9:23:40  对本文有异议
作用一名合格的程序员,得能文能武。写的了代码,也要写的了单元测试。

单元测试步骤
1.File -> New -> Target, 选择单元测试Target,创建成功
如果项目是老项目,那需要手动创建一下UnitTest Target,如果项目里已经有了就忽略。
2.创建一个swift工具的测试类CalculatorTests
然后就可以在里面写单元测试用例了。

单元测试常用知识点
环境变量的管理
setUp()测试开始前,初始化要使用的环境变量
tearDown()测试结束后,清理使用的环境变量
控制测试用例的执行顺序
1.可以通过test+101这种形式,顺序会根据test后面的数字,先小,后大的顺序进行执行
2.使用测试用例组的形式,执行顺序会按照组中的顺序,由上到下进行执行
静态变量allTests中放置排序后的测试用例
  1. static var allTests = [
  2. testCase(CalculatorTests.testAddition),
  3. testCase(CalculatorTests.testSubtraction)
  4. ]

测试异步方法

使用XCTestExpectation测试异步方法
  1. let expectation = XCTestExpectation(description: "HTTP request")
  2. expectation.fulfill()
  3. 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 方法会启动一个计时器,在代码块执行完成后停止计时器并记录测量的指标值。可以在测试报告中看到测量结果。
  1. import XCTest
  2. @testable import ARDemo
  3.  
  4. //创建CalculatorTests类,继承自XCTestCase
  5. class CalculatorTests: XCTestCase {
  6.  
  7. var calculator: Calculator!
  8.  
  9. //测试开始前,初始化要使用的环境变量
  10. override func setUp() {
  11. super.setUp()
  12. calculator = Calculator()
  13. }
  14.  
  15. //测试结束后,清理使用的环境变量
  16. override func tearDown() {
  17. super.tearDown()
  18. calculator = nil
  19. }
  20.  
  21. //要控制测试用例的执行顺序
  22. //1.可以通过test+101这种形式,顺序会根据test后面的数字,先小,后大的顺序进行执行
  23. func test101Addition() {
  24. let result = calculator.add(2, 3)
  25. XCTAssertEqual(result, 5, "Addition of 2 and 3 should be 5")
  26. }
  27.  
  28. func test102Addition() {
  29. let result = calculator.add(2, 3)
  30. XCTAssertEqual(result, 5, "Addition of 2 and 3 should be 5")
  31. }
  32.  
  33. func test103Addition() {
  34. let result = calculator.add(2, 3)
  35. XCTAssertEqual(result, 5, "Addition of 2 and 3 should be 5")
  36. }
  37.  
  38. //2.使用测试用例组的形式,执行顺序会按照组中的顺序,由上到下进行执行
  39. func testAddition() {
  40. let result = calculator.add(2, 3)
  41. XCTAssertEqual(result, 5, "Addition result is incorrect")
  42. }
  43.  
  44. func testSubtraction() {
  45. let result = calculator.subtract(5, 2)
  46. XCTAssertEqual(result, 3, "Subtraction result is incorrect")
  47. }
  48. //静态变量allTests中放置排序后的测试用例
  49. static var allTests = [
  50. testCase(CalculatorTests.testAddition),
  51. testCase(CalculatorTests.testSubtraction)
  52. ]
  53.  
  54. //测试异步方法
  55. func testAsyncHTTPRequest() {
  56. let expectation = XCTestExpectation(description: "HTTP request")
  57. // 调用异步HTTP请求方法
  58. asyncHTTPRequest { response in
  59. // 处理回调结果
  60. XCTAssertTrue(response.success)
  61. expectation.fulfill()
  62. }
  63. // 等待异步操作完成
  64. wait(for: [expectation], timeout: 5.0)
  65. }
  66.  
  67. //测试功能的执行性能
  68. func testPerformance() {
  69. measure([.wallClockTime, .userTime]) {
  70. // 执行需要测试性能的代码块
  71. }
  72. }
  73.  
  74. }
  75.  
  76.  
  77. class Calculator {
  78. func add(_ a: Int, _ b: Int) -> Int {
  79. return a + b
  80. }
  81.  
  82. func subtract(_ a: Int, _ b: Int) -> Int {
  83. return a - b
  84. }
  85. }
写完代码写一下单元测试还是挺有意义的,虽然面向测试编程虽然前期会影响一些进度,但会收获额外的东西
1.对自己的代码充满信心
2.直面测试的勇气
3.节省回归测试的时间
另外,在写单元测试用例的过程中,也会自己发现某些隐藏的Bug和不符合预期功能的方法,并调整不规范的代码设计。所以有条件的话还是要写一下单元测试。
而且后续也可以在单元测试用例量达到一定程度后,可以搭建自动化测试后台,进行定时执行单元测试,发放测试报告。
 
 

原文链接:https://www.cnblogs.com/zhou--fei/p/17386296.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号