当测试失败的EUNIT失败时,Dets叶子开放过程



我一直在玩eunit,这很好,但是当我的测试失败并且没有正确关闭的dets时,我遇到了问题,该文件仍在我的状态下打开Shell和我无法关闭它,因为它是由另一个过程创建的(当我运行测试时)。

您遇到了同一问题吗?我可以尝试有效地捕捉Eunit吗?

感谢您的任何输入!

使用常见测试。EUNIT适用于没有副作用的小功能。

eunit是完美适合测试多个过程和dets,不用担心。

我认为测试失败的唯一情况,因此未关闭Dets文件,这是因为您不使用固定装置。

也就是这样的代码:

wrong_test() ->
    setup(),
    ?assert(false),
    cleanup().

不会调用清理(),因为带有?assert()的线将抛出异常。这是预期的行为。因此,如果应该关闭Dets文件,则不会关闭它。

EUNIT文档解释说,确保清理功能始终执行的方法,无论测试发生了什么,都使用"固定装置",即setupforeach。例如:

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 Shell退出时,文件将正确关闭。唯一未正确关闭Dets文件的时间是Erlang运行时系统本身崩溃时。

其他有用的文档来源,比我前面提到的官方官员更容易理解,这是关于EUNIT的Lyse章节,以及有关Eunit的两个演示文稿,您可以在Erlang Factory网站上找到这些章节。

相关内容

  • 没有找到相关文章

最新更新