plunit test, по-видимому, создает закулисный модуль ... но может ли этот модуль быть выгружен? - PullRequest
1 голос
/ 11 марта 2020

Я хочу использовать plunit , как это реализовано в SWI Prolog, для запуска нескольких модульных тестов в классном стиле!

Поэтому я хочу ввести их непосредственно в терминал:

[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 для теста X. Это имеет смысл.

Но есть ли способ выгрузить тестовый модуль exercise?

Должно быть ...

Обратите внимание, что вы можете выгрузить файл с unload_file / 1 но не с модулем?

Обновление:

Вместо ввода кода с помощью [user]. и [file] все работает. Хм.

1 Ответ

1 голос
/ 11 марта 2020

Поскольку я не знаю, как воспроизвести вашу проблему, вам придется проверить это для себя.

Использовать destroy_module / 1

Так как она не экспортируется из модуля modules я предполагаю, что modules:destroy_module(X) должно работать.

Поскольку это не экспортируемый предикат и не задокументировано Caveat emptor


РЕДАКТИРОВАТЬ

Вместо ввода кода с помощью [user]. и [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.
...