参考:
shibu.jp: EUnitユーザーズガイド : http://articles.shibu.jp/category/777978-1.html
まず、上記サイトを参考にして、プログラム書いてみた。
【ソース】
----- ここから -----
-module(test_eunit).
-include_lib("eunit/include/eunit.hrl").
%-export([start/0]).
-define(TEST(X),reverse_X_test()).
-ifdef(debug).
%start() ->
% reverse_test(),
% ?TEST(nil),
% reverse_one_test(),
% reverse_two_test(),
% reverse_ng_test().
% 任意の値を返すとテストは成功とみなされる。
% なんらかの例外を投げる場合には失敗したとみなされる。
reverse_test() -> lists:reverse([1,2,3]).
?TEST(nil) -> [] = lists:reverse([]).
reverse_one_test() -> [1] = lists:reverse([1]).
reverse_two_test() -> [2,1] = lists:reverse([1,2]).
reverse_ng_test() -> [1,1] = lists:reverse([1,2]).
-endif.
----- ここまで -----
これをコマンドプロンプト上から実行した。
【コマンドプロンプト】
$> C:\Users\andre\ework>erlc -Ddebug test_eunit.erl
$> C:\Users\andre\ework>erl -noshell -run test_eunit test -run init stop
test_eunit: reverse_ng_test...*failed*
::error:{badmatch,[2,1]}
in function test_eunit:reverse_ng_test/0
=======================================================
Failed: 1. Skipped: 0. Passed: 4.
ソース上はコメントアウトされているが、start()から全テストプログラムを実行しなくていい。それが素晴らしい!
単に、xx_test()と関数名の最後にtestと付けただけで、Eunitはテスト関数だと認識してくれて、実行し、実行結果を出してくれる。いい!
defineは気にしないでX-(