您的位置:首页 > 编程语言

2015-2-26【erlang】 构造伪随机数,来测试需要随机数据的erlang代码

2015-02-26 15:40 162 查看
今天还在闷头写erlang 服务器程序的测试代码。在上线阶段加入,逆向分析逻辑代码,真是蛋疼,erlang,没有想象中的好掌握。嗯,不懂之处,要多问问老大,有时候,他们一句点醒,可以省下自己很多宝贵的生命,继而提高效率。

今天写erlang测试代码的时候,碰到了一个问题,就是某个源代码中的逻辑部分需要用到 random:uniform()/random:uniform(N),而随机数的加入,会影响到结果的生成,此时结果不是预知的,不知道如何写测试代码,后来问了老大,原来,他们早已经解决这个问题,好记性不如烂笔头:

利用条件编译 和 进程字典 来设置自己的 “随机数”,继而可控制程序的结果方便写测试代码:

pj_random:uniform/1函数

-ifndef(TEST).      %%非测试,则通过  条件编译 来使用用 官方自带 的随机函数,否则,用 进程字典 来构造 伪随机值 
uniform() -> random:uniform().
uniform(N) -> random:uniform(N).
-else.              
uniform() ->
    case erlang:get(pj_random_mock) of    
        [H | T] ->
            erlang:put(pj_random_mock, T), 
            H; 
        _ ->
            random:uniform()
    end.
uniform(N) when is_integer(N) andalso N > 0 ->
    case trunc(uniform() * N) of
        N -> N;
        Result -> Result + 1
    end.
-endif.


在 测试代码中某个部分写入如下代码,可构造伪随机值

erlang:put(pj_random_mock, [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]),
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: