Logtalk:运行 所有测试套件的最佳方式是什么?
Logtalk : what is the best way to run all test suites?
在 Logtalk 代码示例中,每个示例都提供了自己的测试套件,运行可以在 "standalone" 模式下启用(一次一个测试套件)。
但是,正如标题所说,我对 测试所有测试套件 的最佳方法感兴趣(所有加载 objects 继承 lgtunit
我的应用程序),并在最后有一个所有测试执行的摘要(总通过/跳过/失败)。
例如SWI-Prolog,run_tests/0
运行全部test-units.
对于自动化,Logtalk 发行版中包含一个 logtalk_tester
Bash shell 脚本,可以为您提供一个摘要。对于 运行 对扩展 lgtunit
的所有 已加载 对象的所有测试,部分解决方案可能是一个目标,例如:
?- forall(extends_object(TestObject, lgtunit), TestObject::run).
但这不会给你一个单一的总结。解决办法是定义一个summary对象,定义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 做出很好的贡献...
这是运行所有已注册测试套件的运行ner对象的第一个实现:https://github.com/koryonik/logtalk-experiments/tree/master/test-runner
用法很简单:
只需 运行 所有已加载的 lgtunit 测试套件:
test_runner::autoregister_tests, % register all loaded lgtunit objects
test_runner::run_tests.
或者手动注册你想要的测试套件运行 :
test_runner::register_tests(test_suite_obj1),
test_runner::register_tests(test_suite_obj2),
test_runner::run_tests. %run the 2 test suites
在 Logtalk 代码示例中,每个示例都提供了自己的测试套件,运行可以在 "standalone" 模式下启用(一次一个测试套件)。
但是,正如标题所说,我对 测试所有测试套件 的最佳方法感兴趣(所有加载 objects 继承 lgtunit
我的应用程序),并在最后有一个所有测试执行的摘要(总通过/跳过/失败)。
例如SWI-Prolog,run_tests/0
运行全部test-units.
对于自动化,Logtalk 发行版中包含一个 logtalk_tester
Bash shell 脚本,可以为您提供一个摘要。对于 运行 对扩展 lgtunit
的所有 已加载 对象的所有测试,部分解决方案可能是一个目标,例如:
?- forall(extends_object(TestObject, lgtunit), TestObject::run).
但这不会给你一个单一的总结。解决办法是定义一个summary对象,定义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 做出很好的贡献...
这是运行所有已注册测试套件的运行ner对象的第一个实现:https://github.com/koryonik/logtalk-experiments/tree/master/test-runner
用法很简单:
只需 运行 所有已加载的 lgtunit 测试套件:
test_runner::autoregister_tests, % register all loaded lgtunit objects
test_runner::run_tests.
或者手动注册你想要的测试套件运行 :
test_runner::register_tests(test_suite_obj1),
test_runner::register_tests(test_suite_obj2),
test_runner::run_tests. %run the 2 test suites