首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当EUnit测试失败时,Dets将保持开放进程

当EUnit测试失败时,Dets将保持开放进程
EN

Stack Overflow用户
提问于 2014-03-08 09:22:16
回答 2查看 86关注 0票数 1

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

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

谢谢您的意见!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-09 08:05:55

使用共同测试。EUnit适用于小功能测试,无副作用。

票数 0
EN

Stack Overflow用户

发布于 2016-01-17 16:42:08

EUnit非常适合测试多个进程和DETS,别担心。

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

也就是说,这样的代码:

代码语言:javascript
复制
wrong_test() ->
    setup(),
    ?assert(false),
    cleanup().

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

EUnit文档解释说,无论测试发生什么情况,确保始终执行清理函数的方法是使用“setupforeach”。例如:

代码语言:javascript
复制
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时,文件将被正确关闭。只有Erlang运行时系统本身崩溃时才能正确关闭DETS文件。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22267479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档