`
songry
  • 浏览: 84562 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Clojure-JVM上的函数式编程语言(13)自动化测试 作者: R. Mark Volkmann

阅读更多

 原帖地址: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 ...)
 

    执行的顺序将是:

  1. fixture-1初始化
  2. fixture-2初始化
  3. 一个测试函数
  4. fixture-2卸载
  5. fixture-1卸载

    注册装置来环绕整体测试运行:

(use-fixtures :once fixture-1 fixture-2 ...)
 

    执行的顺序将是:

  1. fixture-1初始化
  2. fixture-2初始化
  3. 所有测试函数
  4. fixture-2卸载
  5. fixture-1卸载

    Clojure在test子目录下装有自身的测试套件,切换到包含有 Clojure src和 test的目录下,然后键入 "ant test "

就可以运行它们。

分享到:
评论

相关推荐

    函数式编程语言:Clojure.zip

    史上最全编程语言全套教程,共99门...函数式编程语言 壳编程语言 常见编程语言 并行编程语言 数据分析编程语言 数据库查询语言 系统编程语言 脚本编程语言 逻辑编程语言 面向对象编程语言 等所有常见的变成语言系列教程

    Clojure入门教程- Clojure – Functional Programming for the JVM中文版

    - **Clojure**是一种运行在Java虚拟机(JVM)上的动态编程语言,它继承了Lisp家族的强大功能,同时结合了现代编程语言的优点,如面向对象编程和函数式编程。 #### 二、Clojure的特性 - **函数式编程**: Clojure强调...

    Clojure脚本:函数式编程的现代演绎

    Clojure是一种运行在Java虚拟机(JVM)上的动态函数式编程语言,它属于Lisp家族。Clojure的设计哲学强调了函数作为一等公民的地位,以及数据的不可变性,这些特性使得Clojure在处理并发编程和数据密集型应用时表现...

    Scala与Clojure函数式编程模式:Java虚拟机高效编程1

    Scala和Clojure都是现代函数式编程语言,它们都运行在Java虚拟机(JVM)上,能够利用Java的生态系统和资源。Scala是一种多范式语言,结合了面向对象和函数式编程的特点,提供了强大的类型系统和模式匹配功能。...

    来源clojure-toolbox.com___下载.zip

    1. **Clojure编程语言**:Clojure是一种基于Lisp的函数式编程语言,运行在Java虚拟机(JVM)上。它强调 immutability(不可变性)、concurrency(并发性)和functional programming(函数式编程)特性。 2. **函数...

    clojure-utils, 各种小型但方便的clojure实用程序函数库.zip

    clojure-utils, 各种小型但方便的clojure实用程序函数库 各种小型但方便的Clojure实用程序函数库特别关注:Clojure.java - 用于从Java调用Clojure的实用工具函数的Java类arrays.clj - 操作Java数组core.clj - 应该在...

    clojure-1.5.1.jar

    clojure-1.5.1.jar

    clojure-sha-3-源码.rar

    Clojure是一种基于Lisp的现代函数式编程语言,它运行在Java虚拟机(JVM)上,充分利用了Java平台的强大功能。SHA-3,全称为Secure Hash Algorithm 3,是美国国家标准与技术研究所(NIST)发布的一种密码散列函数标准...

    Scala与Clojure函数式编程

    Scala与Clojure都是运行在Java虚拟机(JVM)上的语言,它们都支持函数式编程范式。Scala是一种多范式的编程语言,提供了面向对象和函数式编程的特性。Clojure是一种Lisp方言,同样运行在JVM上,它拥有丰富的函数式...

    CS1807-U201814745-朱槐志函数式编程1

    Clean是另一种函数式编程语言,它强调可读性和模块化。Clean采用了类型推断,程序员不需要显式声明变量类型,编译器可以自动推断。此外,它还支持异常处理和并行计算,适合构建大规模的并发系统。 4. Erlang Erlang...

    clojure-1.6.0-RC3.zip

    Clojure是一种基于Lisp的函数式编程语言,它运行在Java虚拟机(JVM)上,充分利用了Java生态系统的优势。这个压缩包很可能是Clojure 1.6.0-RC3的源代码发布,开发者可以下载、编译和测试以确保其稳定性和兼容性。 ...

    clojure-must-watch-源码.rar

    Clojure是一种功能强大的Lisp方言,它在Java虚拟机(JVM)上运行,并且具有丰富的函数式编程特性。这个压缩包"clojure-must-watch-源码.rar"似乎包含了与Clojure相关的源代码,可能是为了帮助学习者深入理解Clojure...

    clojure-basics-源码.rar

    Clojure是一种基于Lisp的函数式编程语言,它运行在Java虚拟机(JVM)上,充分利用了Java的生态系统。这个“clojure-basics-源码.rar”压缩包很可能是包含了一些基本Clojure编程概念的示例代码或者教程。虽然没有具体...

    Clojure入门介绍: Clojure - Functional Programming for the JVM

    Clojure入门介绍: Clojure - Functional Programming for the JVM

    clojure-1.5.0.zip

    该版本为稳定版,将zip文件解压,放到某个指定目录,cd进入这个目录,执行以下命令即可java -cp clojure-1.5.0.jar clojure.main。...当今最主流的运算平台JVM,把函数式编程语言引入JVM也是新方向。

    programming-clojure-3rd

    《Programming Clojure 第三版》是一本深入探讨Clojure编程语言的专业书籍,旨在帮助开发者全面理解和掌握这门基于Lisp的现代函数式编程语言。Clojure是由Rich Hickey设计的,它运行在Java虚拟机(JVM)上,同时也...

    clojure1.3.0及资料

    Clojure是一种基于Lisp的函数式编程语言,它运行在Java虚拟机(JVM)上,充分利用了Java的生态系统。Clojure的设计目标是提供一种静态类型的、并发的、内存安全的语言,同时保持Lisp的简洁性和灵活性。在这个压缩包...

    函数式编程另类指南.pdf

    - **自动优化**:现代函数式语言通常能够进行自动化的内存管理和优化。 #### 五、函数式编程面临的挑战 - **学习曲线陡峭**:对于习惯了命令式编程的开发者来说,理解和应用函数式编程概念需要一定的时间。 - **...

    并行编程语言:Clojure.zip

    史上最全编程语言全套教程,共99门...函数式编程语言 壳编程语言 常见编程语言 并行编程语言 数据分析编程语言 数据库查询语言 系统编程语言 脚本编程语言 逻辑编程语言 面向对象编程语言 等所有常见的变成语言系列教程

    clojure-cheatsheet, 用于Emacs的Clojure Cheatsheet.zip

    clojure-cheatsheet, 用于Emacs的Clojure Cheatsheet 用于Emacs的难以置信方便的 Clojure Cheatsheet,更新为 Clojure,打包成简单,快速,可以搜索的离线形式: 状态准备使用基于 Clojure 1.7.0.安装如果你连接到 ...

Global site tag (gtag.js) - Google Analytics