1

我想使用在 SWI Prolog 中实现的plunit以经典风格运行一些单元测试!

所以我想直接在终端上输入它们:

[user].

然后复制粘贴:

:- begin_tests(exercise).

test(foo) :- bar.

:- end_tests(exercise).

这完美地工作。

...但是如果我再次通过加载测试[user].- 会有类似 Westworld 的体验:

?- [user].
|: :- begin_tests(exercise).

ERROR: user://2:17:
ERROR:    module/2: No permission to redefine module `plunit_exercise' (Already loaded from user://1)
Warning: user://2:17:
Warning:    Goal (directive) failed: user:begin_tests(exercise)

似乎该实现plunit_X为 test创建了一个模块X。这就说得通了。

但是有没有办法卸载测试模块exercise

必须有...

请注意,您可以使用unload_file/1卸载文件,但不能卸载模块?

更新:

而不是使用输入代码[user].并使用 a[file]使其工作。唔。

4

1 回答 1

1

由于我不知道如何重现您的问题,您必须自己测试。

使用destroy_module/1

由于它不是从模块模块中导出的,我猜modules:destroy_module(X)应该可以。

因为它不是一个导出的谓词,也没有记录在案的警告购买者


编辑

而不是使用输入代码[user].并使用 a[file] 使其工作。唔。

user是一个预定义的模块,文件不是 AFAIK。

?- current_module(X).
X = prolog ;
X = sysetm ;
X = user ;
X = predicate_options ;
X = base32 ;
X = read_util ;
X = win_menu ;
X = shlib ;
X = qsave ;
X = prolog_clause ;
X = prolog_history ;
X = pce_swi_hooks ;
X = prolog_stack ;
X = system ;
X = ansi_term ;
X = link_xpce ;
false.
于 2020-03-10T21:56:24.093 回答