0

我使用 EUNIT 模块并包括“eunit/include/eunit.hrl”。我使用参数 func/0 调用 spawn/1 以在测试函数中生成一个新进程,并在新进程中调用 io:format/1 。参数 func/0 是一个递归函数,如下所示:

func() -> 
A = 2,
io:format("#######~p~n", [A]),
timer:sleep(1000),
func().

然后

10> bt:test().
All 2 tests passed.
ok
11>
=ERROR REPORT==== 19-Jun-2013::19:50:54 ===
Error in process <0.122.0> with exit value: {terminated,[{io,format,[<0.121.0>,"
#######~p~n",[2]],[]},{bt,func,0,[{file,"bt.erl"},{line,6}]}]}

出了什么问题,我该怎么办?

4

2 回答 2

2

如果我正确理解问题是您正在生成一个运行永无止境的函数 func() 的进程,但是当 EUnit 进程终止时,它可能会关闭标准输出

这使得发出 io:format() 的进程退出(引发异常)。确实,错误报告准确地提到了这个功能。

我的建议是审查产生一个永无止境的功能的需要。

于 2013-06-19T12:47:24.400 回答
0

fun() 的编写方式是无限递归的。基本上是:

fun() ->
  fun(). 

那将永远不会返回(继续运行),并且可能是 EUNIT 终止的原因。

于 2013-06-19T12:45:51.903 回答