在Python中,您可以执行类似的操作,通常用于单元测试:
>>> import os
>>> from mock import MagicMock
>>> os.listdir = MagicMock(return_value=['file1.txt', 'file2.txt', 'file3.txt'])
>>> os.listdir('./test')
['file1.txt', 'file2.txt', 'file3.txt']
你如何在Elixir中实现同样的目标?
答案 0 :(得分:0)
据我所知,没有Elixir特定的模拟框架。有Meck用于模拟Erlang,并且可以从Elixir调用。我对这里的用例不太清楚。如果您需要从File.ls获得的伪装文件列表,那么我只需将调用包含在另一个函数内的 File.ls 中,并构建该函数的模拟版本。代码如下所示:
defmodule MyFiles do
def get_file_list(dir, mock) do
if mock, do:["file1.txt", "file2.txt", "file3.txt"], else: (File.ls(dir))
end
end
你会这样称呼它:
MyFiles.get_file_list(".", false)
#Actual list of files
MyFiles.get_file_list(".", true)
["file1.txt","file2.txt", "file3.txt"]
在Elixir Lang Talk邮件列表中,模拟等等都是recently discussed。
编辑:Per Patrick Oscity有一个Elixir wrapper for Meck。