Unit testing 在Elixir应用程序中使用ESPC测试异常

Unit testing 在Elixir应用程序中使用ESPC测试异常,unit-testing,testing,elixir,Unit Testing,Testing,Elixir,我刚开始学长生不老药。 我试图用espe()测试异常,但我失败了 这是我的功能 defp调用xml(请求体)do resp=HTTPotion.post(“http://foo.bar,[body:request_body,头:[“内容类型”:“text/xml”]] 如果[200,201]中的响应状态代码 {:好的,elem(XMLRPC.decode(resp.body),1.param} 其他的 升起ABPEROR,消息:“消息正文” 结束 结束 定义创建一些(a、b、c)要做的事情 re

我刚开始学长生不老药。 我试图用espe()测试异常,但我失败了

这是我的功能

defp调用xml(请求体)do
resp=HTTPotion.post(“http://foo.bar,[body:request_body,头:[“内容类型”:“text/xml”]]
如果[200,201]中的响应状态代码
{:好的,elem(XMLRPC.decode(resp.body),1.param}
其他的
升起ABPEROR,消息:“消息正文”
结束
结束
定义创建一些(a、b、c)要做的事情
req=%XMLRPC.MethodCall{method_name:“Foo.Bar”,
params:[a,b,c]}|>XMLPRC.encode!
调用xml(req)
结束
#测验
使用特殊目的
使用HyperMock
进口:墨西哥克
上下文“出现异常时”do
它“返回错误消息”do
#留有:梅克
expect(MyModule,:创建一些东西,fn(“foo”、“bar”、“baz”)->raisecustomerror end)
expect(MyModule.创建一些东西(“foo”、“bar”、“baz”))到eq(“?”)
结束
结束
在这种情况下,我的预期中出现了错误

**(abperor)发生错误!
spec/lib/ex_abpclient_spec.exs:135:exabclientspec.example_返回_创建_回收_eqcpjlrszudikwyovtmxbgfnha/1中的匿名fn/7
(ex_abpclient)ExAbpclient.创建付款和回报(“tr tr”,10966,10,“R”,495,10,“描述”)
spec/lib/ex_abpclient_spec.exs:136:exabclientspec.example_返回_创建_回收_eqcpjlrszudikwyovtmxbgfnha/1
(spect)lib/spect/example\u runner.ex:33:spect.ExampleRunner.run\u example/2
(elixir)lib/enum.ex:1088:enum。“-map/2-lists^map/1-0-”/2
(elixir)lib/enum.ex:1088:enum。“-map/2-lists^map/1-0-”/2
(spect)lib/spect/runner.ex:70:spect.runner.run_示例/1
(spect)lib/spect/runner.ex:43:spect.runner.do_run/2
我怎样才能得到存根异常? 提前谢谢

更新

我尝试使用HyperMock()来存根请求,但也没有成功

context“创建投资回报时”do
它“回报创造回报”吗
HyperMock.do
请求=%request{body:“…”,
标题:[“内容类型”:“text/xml”],
方法:post,
uri:“http://foo.bar/webApiXmlRpcServlet"}
响应=%response{body:“fooooo”,状态:500}
存根请求、请求、响应
除了MyModule,创建一些东西(“a”、“b”、“c”)|>来(引发异常abperor,“foooooo”)
结束
结束
结束#例外
结果如下

/Users/retgoat/workspace/offside/ex_abpclient/spec/lib/ex_abpclient\u spec.exs:135
**(abperor)错误:“fooooo”
(ex_abpclient)lib/ex_abpclient.ex:55:ExAbpclient.call_xml/1
spec/lib/ex_abpclient_spec.exs:143:exabclientspec.example_returns_created_payback_nqfwohpurlvtzskdjxigeybamc/1
(spect)lib/spect/example\u runner.ex:33:spect.ExampleRunner.run\u example/2
(elixir)lib/enum.ex:1088:enum。“-map/2-lists^map/1-0-”/2
(elixir)lib/enum.ex:1088:enum。“-map/2-lists^map/1-0-”/2
(spect)lib/spect/runner.ex:70:spect.runner.run_示例/1
(spect)lib/spect/runner.ex:43:spect.runner.do_run/2
(spect)lib/spect/runner.ex:28:spect.runner.handle_call/3
10个例子,1个失败
在1.28秒内完成(装载时为0.14秒,规格时为1.14秒)
异常被引发,但我无法测试它。

罗曼! 您必须将函数传递给
expect
,而不是函数调用的结果。 因此,只需包装MyModule。通过
fn->end创建一些东西(“a”、“b”、“c”)
,就像您在ExUnit示例中所做的那样:
长生不老药
它“引发异常”吗
expect(fn->MyModule.create_一些东西(“a”、“b”、“c”)end)
|>to(提出异常abperor,“fooooo”)
结束