gpt4 book ai didi

Erlang:我应该如何测试这个?

转载 作者:行者123 更新时间:2023-12-05 00:07:33 24 4
gpt4 key购买 nike

我有一个应用程序,我将消息转换到 gen_server 以启动操作,然后我每秒调用 gen_server 以收集中间结果,直到操作完成。在生产中,它通常需要几分钟,但它仅受输入大小的限制,我也想测试长达一小时的操作。

我想始终通过根据需要运行测试来确保此操作仍然有效。理想情况下,我也想用不同的输入多次运行这个测试。

我现在使用 eunit,但它似乎没有专门构建的方式来执行此场景。普通测试是否提供了这一点?有没有一种优雅的方法来测试这个,还是我应该破解一些东西?总的来说,我很难理解如何在 Erlang 中系统地测试有状态的异步操作。

最佳答案

是的,普通测试可以做到这一点。

这是我们的 erlang emacs 模式提供的通用测试套件框架的简化版本(您可以使用 the normal erlang oneerlware one ):

-module(junk).

%% Note: This directive should only be used in test suites.
-compile(export_all).

-include("test_server.hrl").

%%
%% set up for the suite...
%%
init_per_suite(Config) ->
Config.

end_per_suite(_Config) ->
ok.

%%
%% setup for each case in the suite - can know which test case it is in
init_per_testcase(_TestCase, Config) ->
Config.

end_per_testcase(_TestCase, _Config) ->
ok.

%%
%% allows the suite to be programmatically managed
%%
all(doc) ->
["Describe the main purpose of this suite"];

all(suite) ->
[].

%% Test cases starts here.
%%--------------------------------------------------------------------
test_case(doc) ->
["Describe the main purpose of test case"];

test_case(suite) ->
[];

test_case(Config) when is_list(Config) ->
ok.

有两种基本方法可以做到。

首先在 init_per_suite/1 中启动 gen_server然后在该长期运行的服务器上进行大量原子测试,然后在 end_per_suite/1 中拆除 gen_server .这是首选方式 - 您的 gen_server 应该在许多事务中长期运行且持久,等等……

另一种方法是进行单例测试并使用 init_per_testcase/2 启动 gen_server并在 end_per_testcase/2 中拆除它

关于Erlang:我应该如何测试这个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2089445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com