好的,我正在使用 Meck,但我迷路了。我的第一语言(我已经写了大约 7 个月了)是 Ruby,所以我似乎还无法将我的大脑包裹在 Meck 嘲笑上。我确实得到了 Ruby 的嘲笑。希望有人可以帮助我。另外,我只写了一周的 Erlang。
更新的代码(但模拟仍然不起作用)......
我有一个 Erlang console_io提示器模块,如下所示:
-module(prompter).
-export([prompt/1, guess/0]).
prompt(Message) ->
console_io:gets(Message).
gets() ->
{_, [Input]} = io:fread("Enter: ", "~s"),
Input.
guess() ->
Guess_Input = gets(),
Guess_List = convert_guess_to_list(Guess_Input).
convert_guess_to_list(Guess_Input) ->
re:split(Guess_Input, "", [{return, list}, trim]).
我的测试现在看起来像这样:
-module(prompter_test).
-include_lib("eunit/include/eunit.hrl").
guess_1_test() ->
meck:new(prompter),
meck:expect(prompter, gets, fun() -> "aaaa" end),
?assertEqual(prompter:guess(), ["a","a","a","a"]),
?assert(meck:validate(prompter)),
meck:unload(prompter).
我得到的错误是:
Eshell V5.9.3.1 (abort with ^G)
1> prompter_test: guess_1_test (module 'prompter_test')...*failed*
in function prompter:guess/0
called as guess()
in call from prompter_test:guess_1_test/0 (test/prompter_test.erl, line 10)
in call from prompter_test:guess_1_test/0
**error:undef
我想在我的测试中模拟(存根?)gets函数,这样gets将返回“aaaa”,然后当我在get_guess()上断言时它应该等于[“a”,“a”,“a”,“a” ]。
我该怎么做呢?