1

我一直在玩 EUnit,这很好,但我遇到了问题另一个过程(当我运行测试时)。

你遇到过同样的问题吗?我可以有效地尝试在 EUnit 中捕获吗?

感谢您的任何意见!

4

2 回答 2

0

使用通用测试。EUnit 适合测试没有副作用的小功能。

于 2014-03-09T08:05:55.190 回答
0

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 中“捕获”异常。您可以使用夹具获得相同的效果。

关于您无法从 shell 关闭 DETS 文件的事实,固定装置不会发生这种情况。另外,你的buggy测试也没有问题,因为从Erlang shell退出时文件会正确关闭。唯一没有正确关闭 DETS 文件的情况是 Erlang 运行时系统本身崩溃的时候。

其他有用的文档来源,比我之前提到的非常简洁的官方文档更容易理解,是关于 Eunit 的LYSE 章节和两个关于 Eunit 的演示文稿,您可以在 Erlang Factory 网站上找到。

于 2016-01-17T16:42:08.227 回答