对于自动化,Logtalk 发行版中包含一个logtalk_tester Bash shell 脚本,可为您提供单一摘要。为了对扩展 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 做出很好的贡献......