好的,我正在使用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]).
Run Code Online (Sandbox Code Playgroud)
我的测试现在看起来像这样:
-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).
Run Code Online (Sandbox Code Playgroud)
我得到的错误是这样的:
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 …Run Code Online (Sandbox Code Playgroud) 我创建了我的第一个 Erlang 项目。这是一个简单的密码游戏。我试图不惜一切代价避免使用 OTP,因为它看起来确实令人困惑,而且我的导师认为这次没有必要使用它。
我有三个文件夹: ebin src test
我使用 makefile 来编译所有代码并运行测试。
直到今晚为止,生活都是美好的……
为了模拟我的游戏输入(和输出?),建议我使用 Meck,但我很难将其集成到我的项目中。
我尝试手动安装。我做了一个 Meck 的 git 克隆。我可以“cd”到 Meck 目录中的 eBin 文件夹并编译、运行所有系统测试,并执行基本命令“meck:new(dog)”。惊人的!
现在我需要让 Meck 处理我的项目...我在 Github Meck 自述文件中读到了这一行:“如果您想安装自己构建的 meck 版本,请将 ebin 目录添加到您的 Erlang 代码路径中,或将 meck 文件夹移至您的发布文件夹并确保该文件夹位于您的 ERL_LIBS 环境变量中。”
但我不知道如何将 ebin 目录添加到我的 Erland 代码路径中,我没有发布文件夹(我认为这是一个 rebar 的东西?)并且我不知道如何添加 ERL_LIBS 环境变量。所以我被困住了。
这是我尝试过的:要将 ebin 目录添加到我的代码路径中,我在 makefile 中执行了此操作(我的桌面上现在有 meck 目录):
erlc -pa ~/Desktop/meck/ebin/
Run Code Online (Sandbox Code Playgroud)
我将 ERL_LIBS 添加到我的 .bash_profile 中,如下所示:
export ERL_LIBS='~/Desktop/meck/ebin/'
Run Code Online (Sandbox Code Playgroud)
我也尝试安装 Agner,但安装时出现错误:
ERROR: compile failed while processing /private/tmp/agner.0r04Vm: {'EXIT',
{undef,
[{rebar,get_jobs,
[{config,"/private/tmp/agner.0r04Vm",
[{require_otp_vsn,"R14|R15"},
{lib_dirs,["deps"]},
{escript_incl_apps, …Run Code Online (Sandbox Code Playgroud) 我正在构建一个简单的游戏,并且一直在关注 PIL 书。这是我的游戏基于的场景: http ://www.lua.org/pil/16.1.html
我很挣扎,因为书中只有一个模块,而我正试图让 8 个模块一起工作。
这是我的游戏的一小部分:我现在有一个游戏模块、一个棋盘模块和一个输入/输出模块。
我以为我理解何时使用冒号以及何时使用句点,但我不明白为什么在 PIL 示例中,作者将“o”传递给“new”方法以及为什么该方法上有一个冒号?
我的游戏模块应该是我的最高级别模块。在其中,我想我会更新电路板和输入/输出模块并使它们协同工作。但是对于电路板和输入/输出模块来说,这些“新”(意味着初始化)方法是什么样的呢?
这是我一直在使用的一些代码(简化):
Game = {}
function Game:new(o)
o = {} or o
setmetatable(o, self)
self.__index = self
-- need board and input_output instances below
o.board = Board:new(o)
o.input_output = Input_Output:new(o)
return o
end
return Game
----------------------------------------------------
Board = {}
function Board:new(o)
o = o or {}
-- need layout attribute here
o.layout = { create_layout() }
setmetatable(o, self)
self.__index = self
return o
end
return Board
---------------------------------------------------
Input_Output …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Class.forName而我的Intellij正在抛出编译错误.我的IntelliJ以红色突出显示"theResponse"(在testMethod中)并给出了这个错误:
cannot find symbol symbol : method
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码(和测试)......
package http.response;
public class TestClass {
public TestClass() {
PublicRoute publicRoute = new PublicRoute();
}
public String testMethod() throws ClassNotFoundException {
Class c = Class.forName("http.response.PublicRoute");
return c.theResponse("hi");
}
}
package http.response;
import org.junit.Test;
import static junit.framework.Assert.assertEquals;
public class TestClassTest {
@Test
public void test() throws ClassNotFoundException {
TestClass testClass = new TestClass();
assertEquals("public", testClass.testMethod());
}
}
Run Code Online (Sandbox Code Playgroud)
更新: 我试图做的是"多态"调用来自HashMap中作为String返回的类的响应.我该怎么做?我(松散地)遵循这个例子,但我完全不了解它(http://sourcemaking.com/refactoring/replace-conditional-with-polymorphism).这是我正在尝试做的简化版本.希望这是有道理的.
package http.response;
import java.util.HashMap;
public class TestClass {
HashMap map; …Run Code Online (Sandbox Code Playgroud) 我整天都在使用某些文件夹...例如,我的Documents文件夹中的"dev".
我有一个明智的想法来设置符号链接,所以我可以简单地键入"dev",终端将cd进入该目录.这似乎不起作用.我的两次尝试都在下面.
任何人都知道如何做到这一点还是有更好的方法?
ln -s /Users/kelly/Documents/Dev/ dev
ln -s 'cd /Users/kelly/Documents/Dev/' dev
$ dev
bash: dev: command not found
Run Code Online (Sandbox Code Playgroud)