OUnitの結果をHTMLに
30分プログラム、その557。OUnitの結果をHTMLしてみる。
OUnitは便利なんだけど、結果の出力がテキストだけなので、ちょっとさみしい。JUnitみたいな感じでカラフルに表示して欲しい。
というわけで、テキストじゃなくてHTMLで結果を出力するようにしてみた。
次は、TkでGUI版を作りたいなぁ。
使い方
(* テストの書き方は従来通り *) let tests = "List" >::: [ "length(ok)" >:: (fun () -> assert_equal 3 (List.length [1;1;1])); "length(ng)" >:: (fun () -> assert_equal 3 (List.length [1;1])) ] (* HTMLで出力 *) let _ = run_test_html tests;;
ソースコード
#useとかを使っているので、ocamlコマンドで動かしてください。
#use "topfind";; #require "oUnit";; open OUnit;; let run_test_html tests = let _ = print_endline "<html>"; print_endline "<head><style>"; print_endline ".success{background-color:green;}"; print_endline ".failure{background-color:yellow;}"; print_endline ".error{background-color:red;}"; print_endline "</style></head>"; print_endline "<body><h1>OUnit result</h1><table>" in let r = perform_test (function EResult (RSuccess path) -> Printf.printf "<tr class=\"success\"><td>%s</td><td>Success</td></tr>\n" (string_of_path path) | EResult (RFailure (path,msg)) -> Printf.printf "<tr class=\"failure\"><td>%s</td><td>%s</td></tr>\n" (string_of_path path) msg | EResult (RError (path,msg)) -> Printf.printf "<tr class=\"error\"><td>%s</td><td>%s</td></tr>\n" (string_of_path path) msg | _ -> ()) tests in print_endline "</table></body></html>"; r let tests = "List" >::: [ "length(ok)" >:: (fun () -> assert_equal 3 (List.length [1;1;1])); "length(ng)" >:: (fun () -> assert_equal 3 (List.length [1;1])) ] let _ = run_test_html tests;;