《Clojure编程》笔记 第13章 测试
背景简述
本人是一个自学一年Java的小菜鸡,理论上跟大多数新手的水平差不多,但我入职的新公司是要求转Clojure语言的。坊间传闻:通常情况下,最好是有一定Java的开发工作经验,再转CLojure可能容易一些。我入职后的实际经历也确实让我感受到了Clojure的自学难度略大于自学Java,遇到的困难主要与中文资料较少有关,具体为:
1 中文的面向新手的较为系统的教程材料较少,目前个人感觉最好用的还是《CLojure编程 Emerick著》这本书,网上应该很好找,如果大家没有电子版的话可以留言,我看到后就立刻分享给大家
2 中文的网上相关问题和讨论较少, 以前学Java的时候基本遇到的问题用百度就能解决,现在大概率要直接用bing或谷歌,或者直接在stackoverflow(虽然是英文的,但貌似是最好用的IT问答网站)上查
我的这个系列笔记主要是基于 0工作经验的后端开发转学Clojure 的场景下完成的,里面有一些个人观点和个人理解的注释,写的时候是为了便于自己理解相关的概念,现在分享出来一方面是希望能帮助像我一样的新手更好地理解,另一方面也是希望有高手能够发现错误并帮忙斧正,谢谢
一些格式的简单约定:
粗体:比较重要的内容
斜体:我个人理解/观点或是补充内容,大家选择性食用
P15:表示书上第15页
第13章 测试
13.1 术语
测试的目的:构造合适环境、运行一些代码、证实代码按预期表现或返回
clojure.test:包含在clojure标准函数库的测试框架
模拟对象:模仿某些代码依赖的真实对象或服务的行为,clojure中不太有必要模拟对象
Midje:更受欢迎的一种Clojure测试框架,提供更复杂的语义和功能
断言:编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。
is宏:clojure.test中的断言
testing宏:给测试添加文档、扩展失败报告
13.2 clojure.test
clojure.test:包含在clojure标准函数库的测试框架
13.2.1 定义测试的两种方式
13.2.1.1 用deftest宏把测试定义成单独的函数
特点:
- 只定义零参数的函数
- 与正常函数无异,可以在REPL中使用
常用的构建工具会在项目的test子目录里面查找并运行测试
13.2.1.2 用with-test将测试与被测试函数绑定
13.2.2 测试“套件”
简单理解其实就是函数嵌套调用,比如a调用了b,b调用了c
因为deftest定义测试之后,var的元数据:test已经被写入了,而run-tests会调用所有var的元数据:test函数,所以嵌套使用会导致重复测试,有两个办法解决:
- 定义一个test-ns-hook,作为命名空间下唯一的run-tests入口
- 将子断言放在普通函数中,这样函数就不会有:test元数据
13.2.3 Fixtures
Fixtures提供一种方法来设置和撤除服务、数据库状态、模拟函数和测试数据,从而确保一个命名空间的所有测试在售空的环境里调用所有测试
最新文章
- 常用类String的方法
- 怎样运用好ZBrush中的布尔运算
- Java Eclipse进行断点调试
- SQL 常见函数使用
- c++基础(二):成员he派生类
- Map Resource Definition 中type为 'ArcGIS Server Local'.
- C++达到String分类
- java装饰模式
- C++ 头文件系列(istream)
- php解决json_encode输出GB2312中文问题 (数组)
- 【】tensorflow学习笔记
- 【C】NO.85.EBook.10.C.1.001-【C primer plus】-
- 判断终端类型、微信的文章防盗链、h5页面跳转打开新的app、跳转到app市场
- [POI2007]ZAP-Queries (莫比乌斯反演+整除分块)
- swift.org - About Swift 官网关于notes
- First normal formal Second normal form
- Prime k-tuple UVA - 1404
- xml大项目,增删改查
- Fiddler-- 安装HTTPs证书
- linux驱动学习(八) i2c驱动架构(史上最全) davinc dm368 i2c驱动分析【转】