原帖地址:http://java.ociweb.com/mark/clojure/article.html#Testing
作者:R. Mark Volkmann
译者:RoySong
自动化测试
Clojure基本的自动化测试框架就在Clojure核心代码的测试库中。下面的代码展示了它的主要功能:
(use 'clojure.test)
; Tests can be written in separate functions.
(deftest add-test
; The "is" macro takes a predicate, arguments to it,
; and an optional message.
(is (= 4 (+ 2 2)))
(is (= 2 (+ 2 0)) "adding zero doesn't change value"))
(deftest reverse-test
(is (= [3 2 1] (reverse [1 2 3]))))
; Tests can verify that a specific exception is thrown.
(deftest division-test
(is (thrown? ArithmeticException (/ 3.0 0))))
; The with-test macro can be used to add tests
; to the functions they test as metadata.
(with-test
(defn my-add [n1 n2] (+ n1 n2))
(is (= 4 (my-add 2 2)))
(is (= 2 (my-add 2 0)) "adding zero doesn't change value"))
; The "are" macro takes a predicate template and
; multiple sets of arguments to it, but no message.
; Each set of arguments are substituted one at a time
; into the predicate template and evaluated.
(deftest multiplication
(are [n1 n2 result]
(= (* n1 n2) result) ; a template
1 1 1,
1 2 2,
2 3 6))
; Run all the tests in the current namespace.
; This includes tests that were added as function metadata using with-test.
; Other namespaces can be specified as quoted arguments.
(run-tests)
为了限制当一个测试抛出异常时输出堆栈的深度,绑定特殊符号*stack-trace-depth*一个深度值。
在为了产品使用,采用AOT编译Clojure源码为字节码时,绑定*load-tests*符号为false来避免测试代码被编译成
字节码。
当不出与自动化测试这一层时,Clojure提供了assert宏。它接收一个表达式并对其求值,如果求值的结果是false,
则抛出一个异常。这对于捕获绝对不应该发生的情况非常有用。例子如下:
(assert (>= dow 7000))
测试库的另一个重要特性是装置(fixtures),装置是环绕着测试方法的代码。装置有两类,一类是环绕每个测试方法
的执行,而另一类是环绕所有测试方法的执行。
为了创建一个装置,编写一个函数采用以下模式:
(defn fixture-name [test-function]
; Perform setup here.
(test-function)
; Perform teardown here.
)
这样针对每个测试函数都会调用一次装置函数,test-function参数的值将是当前执行的函数。
注册装置来环绕每个测试方法:
(use-fixtures :each fixture-1 fixture-2 ...)
执行的顺序将是:
- fixture-1初始化
- fixture-2初始化
- 一个测试函数
- fixture-2卸载
- fixture-1卸载
注册装置来环绕整体测试运行:
(use-fixtures :once fixture-1 fixture-2 ...)
执行的顺序将是:
- fixture-1初始化
- fixture-2初始化
- 所有测试函数
- fixture-2卸载
- fixture-1卸载
Clojure在test子目录下装有自身的测试套件,切换到包含有
Clojure src和
test的目录下,然后键入
"ant test
"
就可以运行它们。
分享到:
相关推荐
clojure-utils, 各种小型但方便的clojure实用程序函数库 各种小型但方便的Clojure实用程序函数库特别关注:Clojure.java - 用于从Java调用Clojure的实用工具函数的Java类arrays.clj - 操作Java数组core.clj - 应该在...
clojure-1.5.1.jar
Clojure入门介绍: Clojure - Functional Programming for the JVM
该版本为稳定版,将zip文件解压,放到某个指定目录,cd进入这个目录,执行以下命令即可java -cp clojure-1.5.0.jar clojure.main。...当今最主流的运算平台JVM,把函数式编程语言引入JVM也是新方向。
Clojure是一个JVM的动态函数式语言,最近发布了1.0版本,版本中Clojure提供了一个健壮的代码。Clojure是一套发展快速的新的编程语言,特别是,它为多核计算做了新的解决方案。在今后的软件设计中无论使用Clojure语言...
clojure-cheatsheet, 用于Emacs的Clojure Cheatsheet 用于Emacs的难以置信方便的 Clojure Cheatsheet,更新为 Clojure,打包成简单,快速,可以搜索的离线形式: 状态准备使用基于 Clojure 1.7.0.安装如果你连接到 ...
clojure-csv, 从Clojure读取和写入CSV文件的库 csvclojure CSV是一个用于读取和写入CSV文件的小型库。 主要功能:接受两个常见行终止符。CSV字段内的引号和转义符是正确的句柄。解析时支持在CSV字段中嵌入未转义的行...
Clojure是一种LISP风格的语言,运行在JVM上。Clojure的一大特色就是其并发机制,它支持不可变的数据结构(Clojure是来自于可持久化的数据结构)。Clojure还有一个特色是软件事务存储(Software Transactional Memory...
clojure 1.8.0
氯菊酯 Clojure的。 采用类似于草书的方法静态分析代码。 ... 为您的错误/功能创建测试,然后在测试之后实施代码。 clojure-lsp启动了一个NREPL服务器,可以更改正在运行的实例的代码并实时查看客
java运行依赖jar包
Clojure入门教程- Clojure – Functional Programming for the JVM中文版
Fork of http://code.google.com/p/clojure-jsr223/ that loads the Clojure runtime lazily. Copyright (c) 2009 Armando Blancas. All rights reserved. The use and distribution terms for this software are ...
clojure-sha-3-源码.rar
clojure-must-watch-源码.rar
clojure-1.6 java jvm
clojure-basics-源码.rar
clojure-style-guide:Clojure编程语言的社区编码风格指南
JavaScript 是近年来非常受瞩目的一门编程语言,它既支持面向对象编程,也支持函数式编程。本书专门介绍JavaScript函数式编程的特性。 全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量...
Nginx-Clojure 是一个 Nginx 的模块,用于嵌入 Clojure 或者 Java 或者 Groovy 程序。 可以通过nginx-clojure实现JAVA扩展nginx的功能,如权限验证。