GNU Prolog 中的单元测试
Unit testing in GNU Prolog
我正在尝试将我的 SWI Prolog 应用程序迁移到 GNU Prolog。不幸的是我的单元测试有问题。在 SWIPL 中,我们可以简单地使用 plunit 模块并编写如下所示的测试用例:
:- begin_tests(my_tests).
test(my_predicate_test) :- my_predicate(Result), assertion(Result == [foo, bar]).
test(second_test) :- foo(10, X), assertion(X == "hello world").
:- end_tests(my_tests).
但是如何在 GNU Prolog 中实现单元测试呢?甚至一些额外的库,如 crisp 也不适用于 gprolog。
您可以使用 lgtunit
. Its main features are summarized here。您的大部分测试可以 运行 原样或轻松转换。使用您的示例:
:- object(tests, extends(lgtunit)).
:- uses(lgtunit, [assertion/1]).
:- uses(user, [my_predicate/1, foo/2]).
test(my_predicate_test) :-
my_predicate(Result),
assertion(Result == [foo, bar]).
test(second_test) :-
foo(10, X),
assertion(X == "hello world").
:- end_object.
该工具支持多个 test dialects,其中一些 plunit
通用。例如
:- object(tests, extends(lgtunit)).
:- uses(user, [my_predicate/1, foo/2]).
test(my_predicate_test, true(Result == [foo, bar]) :-
my_predicate(Result).
test(second_test, true(X == "hello world")) :-
foo(10, X).
:- end_object.
假设您正在测试纯 Prolog 代码(假定您使用的是 GNU Prolog),Logtalk 的 Prolog 标准 compliance suite 提供了大量示例。
您还可以导出多种行业标准的测试结果,例如 TAP 和 xUnit,并生成报告以便于浏览(参见 https://infradig.github.io/trealla/)。
有关测试的进一步建议,另请参阅这些 blog posts。
我正在尝试将我的 SWI Prolog 应用程序迁移到 GNU Prolog。不幸的是我的单元测试有问题。在 SWIPL 中,我们可以简单地使用 plunit 模块并编写如下所示的测试用例:
:- begin_tests(my_tests).
test(my_predicate_test) :- my_predicate(Result), assertion(Result == [foo, bar]).
test(second_test) :- foo(10, X), assertion(X == "hello world").
:- end_tests(my_tests).
但是如何在 GNU Prolog 中实现单元测试呢?甚至一些额外的库,如 crisp 也不适用于 gprolog。
您可以使用 lgtunit
. Its main features are summarized here。您的大部分测试可以 运行 原样或轻松转换。使用您的示例:
:- object(tests, extends(lgtunit)).
:- uses(lgtunit, [assertion/1]).
:- uses(user, [my_predicate/1, foo/2]).
test(my_predicate_test) :-
my_predicate(Result),
assertion(Result == [foo, bar]).
test(second_test) :-
foo(10, X),
assertion(X == "hello world").
:- end_object.
该工具支持多个 test dialects,其中一些 plunit
通用。例如
:- object(tests, extends(lgtunit)).
:- uses(user, [my_predicate/1, foo/2]).
test(my_predicate_test, true(Result == [foo, bar]) :-
my_predicate(Result).
test(second_test, true(X == "hello world")) :-
foo(10, X).
:- end_object.
假设您正在测试纯 Prolog 代码(假定您使用的是 GNU Prolog),Logtalk 的 Prolog 标准 compliance suite 提供了大量示例。
您还可以导出多种行业标准的测试结果,例如 TAP 和 xUnit,并生成报告以便于浏览(参见 https://infradig.github.io/trealla/)。
有关测试的进一步建议,另请参阅这些 blog posts。