背景
我有一个库,它使用HTTPoison作为我需要测试的一些功能。为了实现这一目标,我使用了Mox,我相信它是针对长生不老药的通用模拟库(尽管还有其他库,但这个库具有JoséValim的认可印章)。
问题
一切都很好,我在test_helpers.exs中定义了我的模拟
ExUnit.start()
Mox.defmock(HTTPoisonMock, for: HTTPoison)我设置了我的虚拟测试:
defmodule Alfred.Test.Http.Test do
use ExUnit.Case, async: true
import Mox
# Make sure mocks are verified when the test exits
setup :verify_on_exit!
describe "get" do
test "works on OK" do
HTTPoisonMock
|> get(:get, fn _ -> 1 end)
assert HTTPoisonMock.get(1) == 1
end
end
end问题是我不能运行它们:
模块HTTPoison不是行为,请将行为传递给:
模拟契约,而不是实现
现在,我知道JoséValim支持这种思想,因此我们应该嘲笑的一切都应该有一个合同。但HTTPoison不是我的,它也没有。因此,我要提出以下问题:
发布于 2019-01-15 09:13:17
HTTPoison 利用这种行为 HTTPoison.Base,所以在这个特殊情况下,您已经做好了准备。
我如何模拟不使用
Mox提供行为的第三个库?
通常,我们是通过依赖注入来实现这一点的。当您需要第三方时,只需将其作为参数传递,并在测试环境中传递另一个模块/模拟。
https://stackoverflow.com/questions/54195640
复制相似问题