eunit不会等待接收,是不是Eunit有什么特别之处?
-module (test_account).
-include_lib ("eunit/include/eunit.hrl").
-compile (export_all).
login_test() ->
{ok, Socket} = gen_tcp:connect("localhost", 5678,
[binary, {packet, 4}]),
RoleName = <<"abc">>,
LenRoleName = byte_size(RoleName),
Password = <<"def">>,
LenPassword = byte_size(Password),
LoginBin = <<11001:16, LenRoleName:16, RoleName/binary,
LenPassword:16, Password/binary>>,
gen_tcp:send(Socket, LoginBin),
print(Socket).
print(Socket) ->
receive
{tcp, Socket, Data} ->
io:format("Data=~p~n", [Data])
end.如果我直接调用test_account:login_test().,它可以接收响应。
谢谢。
发布于 2012-10-04 19:28:31
我的猜测是监听端出了什么问题,比如缺少{packet,4}参数之类的东西。我在所需的端口上手动启动了一个侦听套接字,测试确实起作用了。
EUnit实际上不应该开箱即用地运行集成测试(尽管也有一些库为集成测试提供了一些便利)。你在这里真正应该做的是这样的:
main_test_() ->
{setup,
fun setup/0,
fun teardown/1,
[{"login", fun login_test/0}]
}.
setup() ->
process_flag(trap_exit, true),
{ok, Pid} = my_tcp_server:start_link(),
Pid.
teardown(Pid) ->
exit(Pid, shutdown).因此,基本上,当只使用EUnit时,您不应该依赖单独运行的服务器。相反,您应该从您的代码显式地启动它,或者,如果它是外部的,则模拟它(或者,如果整个服务器代码很复杂,则只模拟它的一部分)。
附注:不要忘记'main_test_‘末尾的下划线,它是{setup,...}和{foreach,...}测试的契约。
https://stackoverflow.com/questions/12723010
复制相似问题