2017-02-15 46 views
0

我有一个失败的测试。我做了一些改变,解开了它们,再次运行我的测试。我没有失败,我得到了这个。Erlang eunit测试跳过(没有代码改变!)

我所有的.beam文件都存在。我的git status未显示任何更改。

===================================================== 
    Failed: 0. Skipped: 0. Passed: 0. 
One or more tests were cancelled. 
error 
60> room:test(). 

=ERROR REPORT==== 14-Feb-2017::19:36:57 === 
** Generic server <0.1375.0> terminating 
** Last message in was {join,#{auth => "auth",name => "Blandline"}} 
** When Server state == {<0.1376.0>,<0.1379.0>,<0.1380.0>} 
** Reason for termination == 
** {function_clause, 
     [{table,terminate, 
      [{{case_clause,{ok,#{x => "Blandline"}}}, 
       [{table,handle_call,3,[{file,"table.erl"},{line,15}]}, 
       {gen_server,try_handle_call,4, 
        [{file,"gen_server.erl"},{line,615}]}, 
       {gen_server,handle_msg,5,[{file,"gen_server.erl"},{line,647}]}, 
       {proc_lib,init_p_do_apply,3, 
        [{file,"proc_lib.erl"},{line,247}]}]}, 
      {<0.1376.0>,<0.1379.0>,<0.1380.0>}], 
      [{file,"table.erl"},{line,47}]}, 
     {gen_server,try_terminate,3,[{file,"gen_server.erl"},{line,629}]}, 
     {gen_server,terminate,7,[{file,"gen_server.erl"},{line,795}]}, 
     {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,247}]}]} 
room: firstMove_test...*skipped* 
undefined 
*unexpected termination of test process* 
::{function_clause,[{table,terminate, 
          [{{case_clause,{ok,#{x => "Blandline"}}}, 
          [{table,handle_call,3,[...]}, 
           {gen_server,try_handle_call,4,...}, 
           {gen_server,handle_msg,...}, 
           {proc_lib,...}]}, 
          {<0.1376.0>,<0.1379.0>,<0.1380.0>}], 
          [{file,"table.erl"},{line,47}]}, 
        {gen_server,try_terminate,3, 
           [{file,"gen_server.erl"},{line,629}]}, 
        {gen_server,terminate,7, 
           [{file,"gen_server.erl"},{line,795}]}, 
        {proc_lib,init_p_do_apply,3, 
           [{file,"proc_lib.erl"},{line,247}]}]} 

======================================================= 
    Failed: 0. Skipped: 0. Passed: 0. 
One or more tests were cancelled. 
error 

s:s只是gen_server:call的快捷方式。我正在测试此模块中的其他模块。

-module(room). 
-behaviour(gen_server). 
-compile(export_all). 
-include_lib("eunit/include/eunit.hrl"). 

testRoom() -> 
    {ok, R} = room:go(), 
    {ok, T, _} = s:s(R, {join, #{name => "Blandline", auth => "auth"}}), 
    {ok, T, _} = s:s(R, {join, #{name => "Kreutzer", auth => "auth"}}), 
    {R, T}. 

firstMove_test() -> 
    {R, T} = testRoom(), 
    {ok, #{actions := _, board := _, clock := _}} = s:s(R, {play, T, {take, x, {1,2}}, {"Blandline", "auth"}}). 

badMove_test() -> 
    {R, T} = testRoom(), 
    {error, invalid_input} = s:s(R, {play, T, {take, x, {1,2,3}}, {"Blandline", "auth"}}). 

badAuth_test() -> 
    {R, T} = testRoom(), 
    {error, invalid_auth} = s:s(R, {play, T, {take, x, {1,2}}, {"Blandline", "badauth"}}). 

badTable_test() -> 
    {R, _} = testRoom(), 
    {error, bad_table} = s:s(R, {play, self(), {take, x, {1,2}}, {"Blandline", "badauth"}}). 

回答

0

由于错误报告告诉你:

[{{case_clause,{ok,#{x => "Blandline"}}}, 
    [{table,handle_call,3,[{file,"table.erl"},{line,15}]}, 

你,在文件table.erl线15的情况下,条款不符合:-)

认为即使你解开你的更改,测试开始失败的原因是因为你正在运行来自Erlang shell的测试,并且你有一些东西(如gen_server)仍然运行,出于某些原因失败。

用另一种方式说,你的测试是不可重复的,因为它们不能正确拆卸所有的依赖关系,或者因为它们需要外部依赖,比如gen_server在运行测试之前需要在Erlang shell中手动启动。

我强烈建议忘记Erlang shell来运行测试。使用rebar3从终端构建并运行测试。这将迫使你照顾所有的依赖关系并进行强大的测试。完成这项工作所花费的时间将会花在:-)

+0

谢谢!我得看看rebar3,我已经看过那几次推荐了。 – quantumpotato

+0

@quantumpotato我建议看一下rebar3网站,并在Erlang Factory上搜索EUnit,有两个幻灯片比EUnit手册页更容易理解。此外,“学习你的一些Erlang为好!”有一个关于EUnit的章节。 –

+0

谢谢@ marco.m。我试图迁移到rebar3,但有一些困难:http://stackoverflow.com/questions/42283588/rebar3-cowboy-kernel-pid-terminated – quantumpotato