如何在所有 eunit 案例之前启动应用程序

Posted

技术标签:

【中文标题】如何在所有 eunit 案例之前启动应用程序【英文标题】:How to start application before all eunit cases 【发布时间】:2015-01-21 20:08:24 【问题描述】:

我的 Erlang 项目由 rebar 管理,它分为不同的模块。

-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配置文件,不知道是什么原因。

所以我认为有没有办法在所有测试模块之前启动应用程序?

【问题讨论】:

【参考方案1】:

查看灯具:http://erlang.org/doc/apps/eunit/chapter.html#Fixtures

一种快速而肮脏的方法也可能是添加这样的东西作为第一个测试用例。

init_test() ->
  ok, Apps = application:ensure_all_started(myapp),

【讨论】:

【参考方案2】:

来自您使用的 Erlang docs -config 标志 (ERL_AFLAGS="-config rel/pro/etc/app.config") 必须 ERL_AFLAGS="-config 应用程序"

【讨论】:

【参考方案3】:

听起来您执行的测试与unit testing 的想法相去甚远。也许,在这种情况下,您应该使用common test framework?

【讨论】:

以上是关于如何在所有 eunit 案例之前启动应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Swoole系列4.2协程应用与容器

如何在 Spring ApplicationContext 启动之前调用代码?

eunit 测试超时

java spring boot在启动之前从db中获取值

如何在所有其他视图之前以模态方式呈现“启动视图”?

Python应用实战案例-Python协程管理精讲万字长文(建议收藏)