自動化のためにlogtalk_tester
、単一の要約を提供する Logtalk ディストリビューションに含まれる Bash シェル スクリプトがあります。を拡張するすべてのロード済みオブジェクトに対してすべてのテストを実行するlgtunit
場合、部分的な解決策は次のような目標になる可能性があります。
?- forall(extends_object(TestObject, lgtunit), TestObject::run).
しかし、これは単一の要約を提供しません。logtalk::message_hook/4
解決策は、すべての関連情報をインターセプトして収集し、それを要約するフック述語を定義する要約オブジェクトを定義することです。ファイル内のメッセージ用語を確認できlgtunit/lgtunit_messages.lgt
ます。傍受したいのは ですtests_results_summary(Total, Skipped, Passed, Failed, Note)
。何かのようなもの:
:- object(test_summary).
:- public(report/0).
report :-
% compute totals from result_/4 and report them
...
:- private(result_/4).
:- dynamic(result_/4).
:- multifile(logtalk::message_hook/4).
:- dynamic(logtalk::message_hook/4).
logtalk::message_hook(tests_results_summary(Total,Skipped,Passed,Failed,_), _, lgtunit, _) :-
assertz(result_(Total,Skipped,Passed,Failed)).
:- end_object.
run_all/0
場合によっては、上記のソリューションなどを使用して、このオブジェクトに述語を追加することもできます。マルチファイル述語も動的です。したがって、すべてのテストを実行して結果を要約する場合にのみアクティブになるように、その定義をアサートおよび撤回できます。
ところで、上記の行に沿って完全に開発され文書化されたソリューションは、Logtalk に素晴らしい貢献をするでしょう...