首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Logtalk :运行所有测试套件的最佳方法是什么?

Logtalk :运行所有测试套件的最佳方法是什么?
EN

Stack Overflow用户
提问于 2015-11-02 10:16:12
回答 2查看 181关注 0票数 3

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

但是,正如标题所述,我对测试所有测试套件的最佳方法感兴趣--(我的应用程序中所有加载的对象都继承了lgtunit ),并且在测试结束时只有一个测试执行摘要(全部通过/跳过/失败)。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-20 19:55:35

下面是运行所有已注册测试套件的runner对象的第一个实现:https://github.com/koryonik/logtalk-experiments/tree/master/test-runner

用法很简单:

只需运行所有加载的lgtunit测试套件:

代码语言:javascript
复制
test_runner::autoregister_tests, % register all loaded lgtunit objects
test_runner::run_tests.

或者手动注册要运行的测试套件:

代码语言:javascript
复制
test_runner::register_tests(test_suite_obj1),
test_runner::register_tests(test_suite_obj2),
test_runner::run_tests. %run the 2 test suites
票数 1
EN

Stack Overflow用户

发布于 2015-11-02 10:52:56

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

代码语言:javascript
复制
?- forall(extends_object(TestObject, lgtunit), TestObject::run).

但这不会给你一个简单的总结。一种解决方案是定义一个摘要对象,定义logtalk::message_hook/4钩子谓词,以拦截和收集所有相关信息,然后对其进行总结。您可以检查lgtunit/lgtunit_messages.lgt文件中的消息术语。您要拦截的是tests_results_summary(Total, Skipped, Passed, Failed, Note)。类似于:

代码语言:javascript
复制
:- 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做出很好的贡献.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33475275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档