запустить тест eunit из консоли, используя erl -noshell - PullRequest
13 голосов
/ 22 февраля 2011

Я хотел запустить следующую консольную команду eunit из консоли

eunit:test([test_module, [verbose]).

Я пробовал это, но, кажется, не работает erl -noshell -pa ./ebin -s eunit test test_module verbose -init stop

~/uid_server$erl -noshell -pa ./ebin -s eunit test test_module verbose -init stop
undefined
*** test module not found ***
::test_module

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

Вы знаете, как правильно передать не простые аргументы из консоли?

Ответы [ 5 ]

14 голосов
/ 23 февраля 2011

Ваши параметры выглядят неправильно.Это должно работать:

erl -noshell -pa ebin -eval "eunit:test(test_module, [verbose])" -s init stop

-s может запускать функции только без аргументов, указывая модуль и имя функции (например, init и stop для выполнения init:stop()).

Вы также можете передать один список функции arity 1 следующим образом:

-s foo bar a b c

вызовет

foo:bar([a,b,c])

Все параметры передаются только в виде списка атомов (дажекогда вы пытаетесь использовать некоторые другие символы, например числа, они преобразуются в атомы).

Так как вы хотите передать два параметра, а не только атомы, если вы хотите запустить eunit:test/2, у вас будетиспользовать -eval, который принимает строку, содержащую код Erlang в качестве аргумента.Все функции -eval и -s выполняются последовательно в порядке их определения.

Также убедитесь, что у вас есть тестовый код в ./ebin (в противном случае напишите -pa ebin test_ebin, где test_ebin - это ваш тестовый код).

2 голосов
/ 18 февраля 2012

Вы также можете использовать арматуру ...

  • Получите арматуру, перейдя в каталог вашего проекта и набрав следующее:

    curl <a href="http://cloud.github.com/downloads/basho/rebar/rebar" rel="nofollow">http://cloud.github.com/downloads/basho/rebar/rebar</a> -o rebar

    chmod u+x rebar

  • Добавьте следующее к тестируемому модулю сразу после последнего экспорта:

    -ifdef(TEST).

    -include_lib("eunit/include/eunit.hrl").

    -endif.

  • Затем добавьте свои тесты внизу модуля, обернутые в ifdef, например:

    -ifdef(TEST).

    simple_test() ->

    ?assertNot(true).

    -endif.

  • Наконец, запустите rebar из вашей оболочки следующим образом:

    ./rebar compile eunit

1 голос
/ 22 февраля 2011

вы можете попробовать параметры цитаты вместо перечисления.erl -noshell -pa ./ebin -s eunit test "test_module verbose" -init stop

0 голосов
/ 13 мая 2019

С момента вопроса прошло более восьми лет, но все еще есть хорошее решение, не упомянутое в предыдущих ответах.

Как только вы используете EUnit, вы можете использовать некоторые из его "автоматических" функций.Одним из них является автоматический экспорт функции test/0, содержащей все тесты для модуля.

Итак, если вы пишете свои тесты вместе с исходным кодом в том же модуле, все, что вам нужносделать это:

$ erl -noshell -run your_module test -run init stop

Если вы пишете тесты в отдельном, зависимом модуле (как вы должны), вы должны указать на этот модуль:

$ erl -noshell -run your_module_tests test -run init stop

Все это будетработает нормально, но тест не будет запускаться в подробном режиме, как требуется для OP, но это легко решить с помощью переменной окружения EUNIT, установленной в verbose.

Окончательная версия:

$ EUNIT=verbose erl -noshell -run your_module_tests test -run init stop

Веселитесь вместе с Erlang и EUnit!

0 голосов
/ 14 сентября 2012

Я использую этот скрипт: https://github.com/lafka/dotconfig/blob/master/bin/eunit-module для запуска eunit на определенных модулях.

Пример:

eunit-module <module> src ebin -I deps   

Это сделает пару вещей:

  • Arg # 2 - это каталог, в котором находится .erl
  • Arg # 3 - каталог для вывода скомпилированного .beam
  • Arg # 4 ++ - это все дополнительные пути, которые нужно добавить в путь к коду
  • Использование -I указывает дополнительные пути к коду и где искать файлы, на которые ссылается -include_lib
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...