使用Clojure对Java进行单元测试

Ral*_*lph 16 unit-testing clojure

让组织接受备用JVM语言的方法之一是首先使用它来对Java代码进行单元测试 - "老板,我只是要在XXX中编写一些单元测试.它永远不会投入生产. "

在Clojure中有没有这方面的教程?

我刚开始使用Scala来测试Java REST服务器.在Scala中编写测试允许我嵌入预期的XML输出,使用文字List对象模拟数据库调用等,更不用说特征使得很容易抽象出测试的公共代码.

Ale*_*ler 10

基本上你需要的是clojure.test(或许多其他的clojure测试库之一)和标准的Clojure Java互操作.

例:

(ns example.test-java-util
  (:use
   [clojure.test])
  (:import [java.util HashSet]))

(defn new-empty-set []
  (HashSet.))

(deftest test-empty-set
  (is (= 0 (.size (new-empty-set))))
  (is (= true (.isEmpty (new-empty-set))))
  (is (= (new-empty-set) (new-empty-set))))

(deftest test-add-remove
  (is (= (new-empty-set)
         (doto (new-empty-set)
           (.add "xyz")
           (.remove "xyz")))))
Run Code Online (Sandbox Code Playgroud)

然后你会以各种方式运行它们.使用maven clojure插件构建Maven等工具会自动运行它们作为"mvn test"的一部分.在repl中,您可以执行以下操作:

example.test-java-util> (run-tests 'example.test-java-util)

Testing example.test-java-util

Ran 1 tests containing 4 assertions.
0 failures, 0 errors.
{:type :summary, :test 1, :pass 4, :fail 0, :error 0}
Run Code Online (Sandbox Code Playgroud)