2016-08-04 36 views
1

是否可以使用ExUnit Mock模拟一系列返回值与Meck在Erlang中提供此功能的方法相同?ExUnit模拟序列

... 
meck:new(my_module), 
meck:sequence(my_module, method, 1, [Response1, Response2]), 
meck:unload(module), 
... 

如果没有,是否有可能成功地结合在一起梅克和模拟相同的单元测试ExUnit药剂模块?

回答

1

没有提及:meck.sequencemock.ex所以我猜这还不支持。

直接拨打:meck函数应该没有问题,只要它不在Mock.with_mock呼叫之外,并且在完成后确保呼叫:meck.unload/1。 (你使用async: false,正如Mock已经要求的那样)。即使在相同的测试中,这也应该是很好的。

test "the truth" do 
    url = "http://www.google.com" 

    :meck.new(HTTPoison) 
    :meck.sequence(HTTPoison, :get!, 1, [%{body: "foo"}, %{body: "bar"}]) 
    assert HTTPoison.get!(url).body == "foo" 
    assert HTTPoison.get!(url).body == "bar" 
    assert HTTPoison.get!(url).body == "bar" 
    :meck.unload(HTTPoison) 

    assert HTTPoison.get!(url).body =~ "HTML" 

    with_mock HTTPoison, [get!: fn(_url) -> %{body: "baz"} end] do 
    assert HTTPoison.get!(url).body == "baz" 
    end 

    assert HTTPoison.get!(url).body =~ "HTML" 
end 

演示:

$ mix test 
. 

Finished in 0.2 seconds 
1 test, 0 failures