2017-02-15 4 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, и у вас есть что-то (например, gen_server), которое по-прежнему работает, что не удается по некоторым причинам.

Сказано по-другому, что ваши тесты не повторяются, потому что либо они не отключают должным образом все зависимости, либо потому, что перед запуском тестов запускаются вручную вручную в оболочке Erlang, как этот gen_server.

Я настоятельно рекомендую забыть оболочку Erlang для запуска тестов. Используйте rebar3 для создания и запуска тестов с терминала. Это заставит вас заботиться обо всех зависимостях и иметь надежные тесты. Время, затраченное на выполнение этой работы, будет хорошо проведено :-)

+0

Спасибо! Мне нужно будет заглянуть в панель rebar3, я видел, что это рекомендовалось несколько раз. – quantumpotato

+0

@quantumpotato Я предлагаю взглянуть на веб-сайт rebar3 и googling для презентации EUnit на фабрике Erlang, есть два слайд-шоу, которые легче понять, чем страница руководства EUnit. Также: «Узнай, что у тебя Эрланг для великого блага!» имеет главу о EUnit. –

+0

Спасибо @ marco.m. Я пытаюсь перейти на арматуру3, но с некоторым трудом: http://stackoverflow.com/questions/42283588/rebar3-cowboy-kernel-pid-terminated – quantumpotato

Смежные вопросы