我一直在使用EUnit,它很不错,但是我遇到了dets问题,当我的测试失败并且没有正确关闭dets时,文件仍然在我的shell中打开,我无法关闭它,因为它是由另一个进程创建的(当我运行测试时)。
你也遇到过同样的问题吗?我可以试着有效地在EUnit中捕获吗?
谢谢您的意见!
发布于 2014-03-09 08:05:55
使用共同测试。EUnit适用于小功能测试,无副作用。
发布于 2016-01-17 16:42:08
EUnit非常适合测试多个进程和DETS,别担心。
我认为测试失败的唯一情况是没有关闭DETS文件,这是因为您没有使用夹具。
也就是说,这样的代码:
wrong_test() ->
setup(),
?assert(false),
cleanup().不会调用清除(),因为带有?assert()的行会抛出异常。这是预期的行为。因此,如果清理()应该关闭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时,文件将被正确关闭。只有Erlang运行时系统本身崩溃时才能正确关闭DETS文件。
其他有用的文档来源(比我前面提到的非常简洁的官方文档更容易理解)是关于Eunit的关于Eunit的章节和两个演示文稿,您可以在Erlang网站上找到它们。
https://stackoverflow.com/questions/22267479
复制相似问题