gpt4 book ai didi

swi-prolog - 日志通话 : what is the best way to run all test suites?

转载 作者:行者123 更新时间:2023-12-03 09:43:13 25 4
gpt4 key购买 nike

在 Logtalk 代码示例中,每个示例都提供了自己的测试套件,可以在“独立”模式下运行(一次一个测试套件)。

但是,正如标题所说,我对一次测试所有测试套件(在我的应用程序中继承 lgtunit 的所有加载对象)的最佳方法很感兴趣,并在最后有一份所有测试执行的摘要(通过/跳过/失败的总数)。

例如,在 SWI-Prolog 中,run_tests/0 运行所有测试单元。

最佳答案

对于自动化,Logtalk 发行版中包含一个 logtalk_tester Bash shell 脚本,可为您提供单一摘要。为了对扩展 lgtunit 的所有loaded 对象运行所有测试,部分解决方案可能是一个目标,例如:

?- forall(extends_object(TestObject, lgtunit), TestObject::run).

但这不会给你一个单一的总结。解决办法是定义一个summary对象,定义logtalk::message_hook/4 hook predicate来拦截和收集所有相关信息,然后进行汇总。您可以在 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 做出很好的贡献......

关于swi-prolog - 日志通话 : what is the best way to run all test suites?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33475275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com