Как запустить приложение перед всеми случаями юнитов

Мой проект Erlang управляется арматурой, он делится на разные модули.

-pro
  |-- rel
  |-- src
  |-- test
     |--- module1_tests.erl
     |--- module2_tests.erl

и для каждого модуля *_tests.erl используйте Eunit Fixtures для среда настройки. Например,

module1_test_() ->
    {setup,
        fun setup/0,
        fun clean_up/1,
        fun (SetupData) ->
            [
                test_function(SetupData)
            ]
    end}.

setup() ->
    pro:start(),
    ok.

clean_up(_) ->
    pro:stop().

И Makefile это:

test:
    ERL_AFLAGS="-config rel/pro/etc/app.config"  $(REBAR)  compile eunit skip_deps=true 

Здесь я столкнулся с проблемой, так как у меня много тестовых модулей в test/, каждый тестовый модуль будет запускать и останавливать приложение для всего исполняемого потока. Иногда запуск приложения завершается сбоем, сообщается, что файл конфигурации app.config не найден, не знаю почему.

Итак, я думаю, есть ли способ запустить приложение перед всем тестовым модулем?


person linbo    schedule 24.11.2014    source источник


Ответы (3)


Похоже, вы проводите тестирование, которое далеко от unit testing идеи. Может быть, в этом случае вам следует использовать общую тестовую среду?

person Viacheslav Kovalev    schedule 24.11.2014

Из документов Erlang -config, который вы использовали (ERL_AFLAGS="-config rel/pro/etc/app.config"), должен быть ERL_AFLAGS="-config app"

person Alexei K    schedule 28.12.2016

Посмотрите Fixtures: http://erlang.org/doc/apps/eunit/chapter.html#Fixtures

Быстрым и грязным способом также может быть добавление чего-то подобного в качестве первого тестового примера.

init_test() ->
  {ok, Apps} = application:ensure_all_started(myapp),
person Albin Stigo    schedule 07.03.2019