「Clojure と slim3」の夏がやってくる (其の四)
忠実に Junit4 を再現しようとして、いささか躓いてしまいましたが、ヒントは Scala の Slim3 対応にありました。
(参考) Slim3をScalaで動かすためのいろいろ - ゆろよろ日記
package slim3scala.controller.Foo import org.specs.Specification import org.specs.runner._ import org.slim3.tester.ControllerTester object IndexControllerSpec extends org.specs.Specification { val tester = new ControllerTester( classOf[IndexController] ) (以下略)
要は、ControllerTester や AppEngineTester さえ生成できれば、Clojure 由来のテスト環境でまったく問題無い、ということになります。
切っ掛けとなった id:yuroyoro さんには本当に感謝です。
そこで、まずは、コントローラーのテストです。
IndexControllerTest.clj
(ns com.example.controller.IndexControllerTest (:import com.example.controller.IndexController, javax.servlet.http.HttpServletResponse, org.slim3.tester.ControllerTester) (:use clojure.contrib.test-is)) (defn setup-fixtures "Docstring for setup-fixtures." [test-func] (def tester (ControllerTester. (.. (IndexController.) getClass))) (.setUp tester) (.start tester "/") (test-func) (.tearDown tester)) (use-fixtures :each setup-fixtures) (deftest test-sample "Docstring for -run." (is (= (.. HttpServletResponse SC_OK) (.getStatus (.. tester response)))))
次に、サービスのテストです。
Slim3ServiceTest.clj
(ns com.example.service.Slim3ServiceTest (:import com.example.service.Slim3Service, org.slim3.tester.AppEngineTester) (:use clojure.contrib.test-is)) (defn setup-fixtures "Docstring for setup-fixtures." [test-func] (def tester (AppEngineTester.)) (.setUp tester) (test-func) (.tearDown tester)) (use-fixtures :each setup-fixtures) (deftest test-sample "Docstring for -run." (Slim3Service/newAndPut "abc") (is (= 1 (.. (Slim3Service/queryAll) size))))
これを
$ mvn test
で実行してあげると....
(前略) ------------------------------------------------------- T E S T S ------------------------------------------------------- There are no tests to run. Results : Tests run: 0, Failures: 0, Errors: 0, Skipped: 0 # ↑ こちらは Java のテスト結果 [INFO] [clojure:test {execution: test-clojure}] (中略) Ran 2 tests containing 2 assertions. 0 failures, 0 errors. # ↑ こちらが Clojure のテスト結果 (以下略)
はい。無事成功となりました。
余談ではありますが、Clojure のテストは俗に言う setUp や tearDown にクロージャーを上手く取り入れていて、大変分かりやすいですね。
さぁ、これで一通り、準備は完了です。