Для автоматизации есть logtalk_tester
Сценарий оболочки Bash, включенный в дистрибутив Logtalk, который дает вам одно резюме. Для выполнения всех тестов для всех загруженных объектов, простирающихся 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
предикат этого объекта с использованием, например, решение выше. Многозначный предикат также является динамическим. Таким образом, вы можете утверждать и отклонять свое определение так, чтобы оно было активным только тогда, когда вы хотите запускать все тесты и суммировать результаты.
Btw, полностью разработан и документ решения по линии выше, будет сделать хороший вклад в Logtalk ...
Спасибо, я попробую решение на основе вашего предложения и поделись им как только ОК. – Koryonik