小编Kel*_*lly的帖子

如何使用Meck在Erlang中模拟对象?

好的,我正在使用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)

tdd erlang mocking stub meck

6
推荐指数
2
解决办法
3964
查看次数

如何在我的 Erlang 项目中安装 meck?

我创建了我的第一个 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)

erlang erlang-otp meck

5
推荐指数
1
解决办法
795
查看次数

Lua 面向对象编程 - 我不明白如何新建“类”的实例?

我正在构建一个简单的游戏,并且一直在关注 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)

oop lua

3
推荐指数
1
解决办法
2408
查看次数

Java Class.forName将无法编译.得到"找不到符号符号:方法"

我正在尝试使用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)

java class

2
推荐指数
1
解决办法
4907
查看次数

如何创建符号链接以在Mac OSx上的终端中打开目录?

我整天都在使用某些文件夹...例如,我的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)

unix macos bash symlink

2
推荐指数
1
解决办法
9110
查看次数

标签 统计

erlang ×2

meck ×2

bash ×1

class ×1

erlang-otp ×1

java ×1

lua ×1

macos ×1

mocking ×1

oop ×1

stub ×1

symlink ×1

tdd ×1

unix ×1