专栏首页大话swiftswift 单元测试

swift 单元测试

软件中测试是必不可少的,但是咱们一直都没谈这一部分,今天谈谈这么久没搞过的单元测

先说一下突然想写单元测试中部分的原因:

1 最近工作中总是因为一些小的UI调整,而页面的层级又比较深,改个东西要看效果就要重复的手动输一遍……个中滋味自己体会

2 又扯到Vapor上来了,公司服务器做了个虚拟机,舔着脸皮让同事给创建了个Ubuntu虚拟机搞了个端口映射,折腾了两天终于运行起来了,于是更加痴迷于Vapor,但是呢?对于Leaf感觉十分的不满意?因为他把import extend给去掉啦。于是呢就在找它的替代品,这过程中几乎翻遍了GitHub,当然了怎么评判好坏呢?只能看是否写了单元测试和单元测试的覆盖

先看两个Leaf的单元测试:

func testPrint() throws {

let template = "Hello, #(name)!"

let data = TemplateData.dictionary(["name": .string("Tanner")])

try XCTAssertEqual(renderer.testRender(template, data), "Hello, Tanner!")

}

func testConstant() throws {

let template = "<h1>#(42)</h1>"

try XCTAssertEqual(renderer.testRender(template), "<h1>42</h1>")

}

从代码可以看出Leaf做的单元测试是十分充沛和全面的,但就是将早期版本中的extend和import这些tag去掉让人很无语啊

吐槽完了,让我们看看swift的单元测试(很基础的部分哈)

单元测试其实也是个class,大家按照class来理解就行

1 单元测试的所有function都以test开头要

func testExample() { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct // results. }

2 setUp

系统默认是不不显示的,但是这个也是很必要,跟init一样必要

作用就是初始配置必要参数等

 override func setUp() {
 
 let   services: Services = Services.init()
 
 /*
        services.register { (Container) -> (LeafTagConfig) in
            var tagConfig = LeafTagConfig.default()
            tagConfig.use( VaporMarkdown.init(), as: "markdown")
            return tagConfig
        }
        */
 
 let container = BasicContainer(config: .init(), environment: .testing, services: services, on: EmbeddedEventLoop())
 
 let viewsDir = "/" + #file.split(separator: "/").dropLast(3).joined(separator: "/").finished(with: "/Views/")
 
 var tagConfig = LeafTagConfig.default()
        tagConfig.use( VaporMarkdown.init(), as: "markdown")
 
 let config = LeafConfig(tags: tagConfig, viewsDir: viewsDir, shouldCache: false)
 self.renderer = LeafRenderer(config: config, using: container)
    }

上面就是我们给Leaf写markdown标签的时候进行测试前进行环境初始化的一个例子,当然了这要看个人情况,不是必须要……

接下来我们看看几个常用必备的assert

XCTAssertEqual
XCTFail
XCTAssert

swift封装的基于cmark的一个例子

 func testDefault(){
 do{
 let result = try skMarkdownToHTML(textH1)
 XCTAssertEqual(result, "<h1>Hello</h1>\n")
        }catch{
 XCTAssertThrowsError(error)
        }
 do{
 let result = try skMarkdownToHTML(img)
 XCTAssertEqual(result, "<p><img src=\"https://www.baidu.com\" alt=\"我是一个img\" /></p>\n")
        }catch{
 XCTAssertThrowsError(error)


        }
    }

本文分享自微信公众号 - 大话swift(gh_ca2266b7cab0),作者:YuLongLi

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • md tag=> Leaf

    Leaf提供的标签还算丰富,但是缺少了markdown的支持,于是根据需求我们来个markdown的自己写个,同时呢练练自定义tag,感觉真是一举两得……?

    大话swift
  • QuickSort BinaryTree`s deep LeetCode~ListNode

    init(_ value:T, leftNode: Node<T>?, rightNode: Node<T>? ) {

    大话swift
  • swift简易操作sqlite3

    sqlite轻便小巧,底层采用C操作,跨平台在Linux和Android以及iOS甚至是嵌入式都通用,今天我们简易进行一些swift操作sqlite……

    大话swift
  • Angular练习之animations动画二

    引入动画模块>创建动画对象>在动画载体上使用。我觉得其核心的内容在创建动画对象上,今天我们就来练习创建不同的动画对象trigger

    易兒善
  • (七)初遇python甚是喜爱之for、while循环迭代操作

    各位读者大大们大家好,今天学习python的for、while循环迭代操作,并记录学习过程欢迎大家一起交流分享。

    亚乐记
  • 【Python 第25课】 初探list

    昨天课程里的例子有点没说清楚,有同学表示写在程序里发生了错误。因为我当时写这个代码片段时,心里假想着这是在一个函数的内部,所以用了return语句。如果你没有把...

    Crossin先生
  • 使用NodeJS调用Dubbo工程

    使用node-zookeeper-dubbo模块进行处理,官方的文档还是有些简陋,我进行进一步的讲解

    迹_Jason
  • springboot jpa搭建开发环境(一)

    随着spring4的出现,也为springboot奠定了基础,其实在了解spring4原理与一些扩展的同时,我们也就可以很方便搭建开发环境,而springboo...

    sucl
  • python练习题-day12

    (3) 求M中3,6,9组成的列表M = [[1,2,3],[4,5,6],[7,8,9]]

    郭耀华
  • Go 学习笔记 第二弹 初识编写第一个Go程序与package

    up 在 GoProject 目录 src 下创建一个 study 项目目录,之后up又创建了 day01 目录来存放今天学习的代码

    风清醉

扫码关注云+社区

领取腾讯云代金券