2013年3月6日水曜日

[Clojure]Cloverageでカバレッジ計測

Clojureのカバレッジ計測用ライブラリ Cloverage を使ってみます。

leiningenのプラグインとして利用できるので、profile.cljの:pluginsにプラグインを追加します。

;; ~/.lein/profile.clj の :plugins に追加
[lein-cloverage "1.0.2"]

カバレッジの計測対象となるプロジェクトを作成します。

> lein new cloverage-test

プログラムを作成します。

;; src/cloverage_test/core.clj
(ns cloverage-test.core)

(defn fizzbuzz [n]
  (case (mod n 15)
    0 "fizzbuzz"
    (3 6 9 12) "fizz"
    (5 10) "buzz"
    (str n)))

(defn run [end]
  (mapv fizzbuzz (range 1 (inc end))))

テストコードを作成します。

;; test/cloverage_test/core_test.clj
(ns cloverage-test.core-test
  (:use clojure.test
        cloverage-test.core))

(deftest fizzbuzz-test
  (testing "run"
    (is (= ["1" "2" "fizz"] (run 3)))))

テスト+カバレッジ計測を実行します。(lein cloverage)

 > lein cloverage
Test namespaces:  (cloverage-test.core-test)
Performance warning, cloverage_test/core.clj:3 - case has int tests, but tested expression is not primitive.
Loaded  cloverage-test.core  .
Instrumented namespaces.

Testing cloverage-test.core-test

Ran 1 tests containing 1 assertions.
0 failures, 0 errors.
Ran tests.
Produced output in /home/kurohuku/project/cloverage-test/target/coverage .
HTML: file:///home/kurohuku/project/cloverage-test/target/coverage/index.html

以下のようなHTMLが出力されます。

テストコードを追加してすべての行が実行するようにしてみます。

;; test/cloverage_test/core_test.clj
(ns cloverage-test.core-test
  (:use clojure.test
        cloverage-test.core))

(deftest fizzbuzz-test
  (testing "run"
    (is (= ["1" "2" "fizz" "4" "buzz"
            "fizz" "7" "8" "fizz" "buzz"
            "11" "fizz" "13" "14" "fizzbuzz"]
           (run 15)))))

0 件のコメント:

コメントを投稿