Erlang 当EUnit测试失败时,Dets使流程保持打开状态
我一直在玩EUnit,它很好,但是我遇到了dets的问题,当我的测试失败并且没有正确关闭dets时,该文件在我的shell中仍然打开,我无法关闭它,因为它是在我运行测试时由另一个进程创建的 你遇到过同样的问题吗?我能有效地在尤尼特钓到鱼吗 谢谢你的意见 使用。EUnit适用于测试无副作用的小功能。EUnit非常适合测试多个进程和DET,不用担心 我认为测试失败的唯一情况是没有关闭DETS文件,这是因为您没有使用fixture 也就是说,这样的代码:Erlang 当EUnit测试失败时,Dets使流程保持打开状态,erlang,eunit,dets,Erlang,Eunit,Dets,我一直在玩EUnit,它很好,但是我遇到了dets的问题,当我的测试失败并且没有正确关闭dets时,该文件在我的shell中仍然打开,我无法关闭它,因为它是在我运行测试时由另一个进程创建的 你遇到过同样的问题吗?我能有效地在尤尼特钓到鱼吗 谢谢你的意见 使用。EUnit适用于测试无副作用的小功能。EUnit非常适合测试多个进程和DET,不用担心 我认为测试失败的唯一情况是没有关闭DETS文件,这是因为您没有使用fixture 也就是说,这样的代码: wrong_test() ->
wrong_test() ->
setup(),
?assert(false),
cleanup().
不会调用cleanup,因为带有?assert的行将引发异常。这是预期的行为。因此,如果清理应该关闭DETS文件,它将不会关闭它
说明了确保始终执行清理功能的方法,无论测试发生什么情况,都是使用fixture,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中捕获异常。您可以使用夹具获得相同的结果
考虑到您无法从shell关闭DETS文件的事实,这不会发生在fixture中。此外,对于bug测试,这也不是问题,因为从Erlang shell退出时文件将正确关闭。DETS文件未正确关闭的唯一时间是Erlang运行时系统本身崩溃时
其他有用的文档来源,比我前面提到的非常简洁的官方文档更容易理解,是Erlang Factory网站上关于Eunit的两个演示文稿和两个演示文稿。虽然通用测试完全可行,但关于Eunit的这一说法完全错误。EUnit可以完美地测试OP询问的内容,以及更多内容。