Erlang 当EUnit测试失败时,Dets使流程保持打开状态

Erlang 当EUnit测试失败时,Dets使流程保持打开状态,erlang,eunit,dets,Erlang,Eunit,Dets,我一直在玩EUnit,它很好,但是我遇到了dets的问题,当我的测试失败并且没有正确关闭dets时,该文件在我的shell中仍然打开,我无法关闭它,因为它是在我运行测试时由另一个进程创建的 你遇到过同样的问题吗?我能有效地在尤尼特钓到鱼吗 谢谢你的意见 使用。EUnit适用于测试无副作用的小功能。EUnit非常适合测试多个进程和DET,不用担心 我认为测试失败的唯一情况是没有关闭DETS文件,这是因为您没有使用fixture 也就是说,这样的代码: wrong_test() ->

我一直在玩EUnit,它很好,但是我遇到了dets的问题,当我的测试失败并且没有正确关闭dets时,该文件在我的shell中仍然打开,我无法关闭它,因为它是在我运行测试时由另一个进程创建的

你遇到过同样的问题吗?我能有效地在尤尼特钓到鱼吗

谢谢你的意见

使用。EUnit适用于测试无副作用的小功能。

EUnit非常适合测试多个进程和DET,不用担心

我认为测试失败的唯一情况是没有关闭DETS文件,这是因为您没有使用fixture

也就是说,这样的代码:

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询问的内容,以及更多内容。