首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PlUnit改进错误报告?

如何使用PlUnit改进错误报告?
EN

Stack Overflow用户
提问于 2021-12-21 19:45:05
回答 1查看 73关注 0票数 1

我正在使用SWI的PlUnit编写测试,并希望提供一个更好的错误消息,也许可以通过将我所得到的与我所期望的有所不同。

下面的最小工作示例(MWE)说明了我所追求的目标:

代码语言:javascript
复制
:- module(mwe, [parse_int/2]).

parse_int(Str, Num) :- number_string(Num, Str):

:- begin_tests(mwe).
:- use_module(mwe).

testcase("1", 1).
testcase("10", 10).
testcase("100000000000", 10000000000). % Oops
test("parse int", [forall(testcase(Text, Want))]) :-
  parse_int(Text, Got),
  assertion(Got = Want).

:- end_tests(mwe).

产出如下:

代码语言:javascript
复制
% PL-Unit: mwe ..
ERROR: /home/bkim/Projects/swifun/mwe.pl:11:
    test parse int (forall bindings = ["100000000000",10000000000]): assertion failed
    Assertion: 100000000000=10000000000
false.

类似于go-cmp的一个不同的结果如下所示:

代码语言:javascript
复制
- 100000000000
+ 10000000000

这比较容易一目了然。

我找不到对一般Prolog术语执行这种检查的任何东西,更接近于编辑列表之间的距离的例子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-23 00:17:56

您应该将比较移到测试规则的头上:

代码语言:javascript
复制
test("parse int", [forall(testcase(Text, Want)), Got = Want]) :-
    parse_int(Text, Got).

这样,你就能更清楚地知道你想要测试表达什么。它还允许PlUnit提供更多的信息输出:

代码语言:javascript
复制
ERROR: /home/isabelle/foo.pl:11:
    test parse int (forall bindings = ["100000000000",10000000000]): wrong answer (compared using =)
ERROR:     Expected: 10000000000
ERROR:     Got:      100000000000
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70440851

复制
相关文章

相似问题

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