[英]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文档解释说,不管测试发生什么,确保始终执行清除功能的方法是使用“夹具”,即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中“捕获”异常。 您可以使用灯具获得相同的效果。
关于无法从外壳关闭DETS文件的事实,使用固定装置不会发生这种情况。 另外,对于您的越野车测试,这也不是问题,因为从Erlang Shell退出时文件将被正确关闭。 唯一未正确关闭DETS文件的时间是Erlang运行时系统本身崩溃时。
其他有用的文档来源,比我之前提到的简洁的官方指南更容易理解,是有关Eunit的LYSE章节和有关Eunit的两个演示文稿,您可以在Erlang Factory网站上找到它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.