繁体   English   中英

当EUnit测试失败时,Dets会退出流程

[英]Dets leaves open process when test fails with EUnit

我一直在使用EUnit,这很好,但是我遇到了Dets问题,当我的测试失败并且没有正确关闭Dets时,该文件仍在我的Shell中打开,我无法关闭它,因为它是由另一个过程(当我运行测试时)。

您是否遇到过同样的问题? 我可以尝试高效地捕获EUnit吗?

感谢您的输入!

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

不用担心,EUnit 非常适合测试多个流程和DETS。

我认为唯一失败的测试是由于未使用固定装置而导致测试无法关闭DETS文件。

也就是说,这样的代码:

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

不会调用cleanup(),因为带有?assert()行将引发异常。 这是预期的行为。 因此,如果cleanup()应该关闭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网站上找到它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM