Dets оставляет открытым процесс, если тест не пройден с помощью EUnit
Я играл с EUnit, это хорошо, но у меня возникают проблемы с dets, когда мой тест не пройден и он не закрыл должным образом, файл все еще открыт в моей оболочке, и я не могу закрыть его, потому что он был создан другой процесс (когда я запускал тесты).
Вы столкнулись с той же проблемой? Могу ли я попробовать поймать в EUnit эффективно?
Спасибо за любой вклад!
2 ответа
Используйте общий тест. EUnit подходит для тестирования небольших функций без побочных эффектов.
EUnit идеально подходит для тестирования нескольких процессов и DETS, не волнуйтесь.
Я думаю, что единственный случай, когда тест не пройден и, как результат, не закрывает файл DETS, это потому, что вы не используете прибор.
Код такой:
wrong_test() ->
setup(),
?assert(false),
cleanup().
НЕ будет вызывать cleanup(), потому что строка с ?assert()
выбросит исключение. Это ожидаемое поведение. Таким образом, если cleanup () должен закрыть файл DETS, он не закроет его.
Документация EUnit объясняет, что способ быть уверенным в том, что функция очистки всегда выполняется, независимо от того, что происходит с тестами, это использовать "крепеж", либо setup
или же foreach
, Например:
correct_test_() ->
{setup,
% Setup
fun() ->
?assertMatch({ok, Table}, dets:open_file("hello", [])),
Table
end,
% Cleanup
fun(Table) ->
?assertMatch(ok, dets:close(Table)).
end,
% Tests
[
% This will fail, but the cleanup WILL be called
?_assert(false)
]
}.
Таким образом, нет необходимости "ловить" исключение в Erlang для этого конкретного случая. Вы получаете то же самое, используя приспособление.
Что касается того, что вы не можете закрыть файл DETS из оболочки, это не произойдет с фиксатором. Кроме того, это также не является проблемой для вашего теста с ошибками, поскольку файл будет закрыт при выходе из оболочки Erlang. Единственный раз, когда файл DETS не закрывается должным образом, это когда происходит сбой самой системы времени исполнения Erlang.
Другим полезным источником документации, более легким для понимания, чем краткий официальный документ, о котором я упоминал ранее, являются глава LYSE о Eunit и две презентации об Eunit, которые вы можете найти на веб-сайте Erlang Factory.