Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Testing ExUnit没有断言/反驳,完全依赖于模式匹配?_Testing_Elixir_Ex Unit - Fatal编程技术网

Testing ExUnit没有断言/反驳,完全依赖于模式匹配?

Testing ExUnit没有断言/反驳,完全依赖于模式匹配?,testing,elixir,ex-unit,Testing,Elixir,Ex Unit,我正在测试函数的返回值。这两种方法中哪一种是首选方法 test“额外详细,使用assert”do {:error,reason}=MyModule.my_-fun 断言原因==:否 结束 测试“仅使用模式匹配”do {:error,:nope}=MyModule.myu 结束 我喜欢第一个,因为我现在不喜欢,测试需要一个assert语句,运行测试时的错误消息更具描述性。另外,带有行号的MatchError也应该足够了。您可以使用assert和=来获得assert和更具描述性的错误消息,并且只需

我正在测试函数的返回值。这两种方法中哪一种是首选方法

test“额外详细,使用assert”do
{:error,reason}=MyModule.my_-fun
断言原因==:否
结束
测试“仅使用模式匹配”do
{:error,:nope}=MyModule.myu
结束

我喜欢第一个,因为我现在不喜欢,测试需要一个
assert
语句,运行测试时的错误消息更具描述性。另外,带有行号的
MatchError
也应该足够了。

您可以使用
assert
=
来获得
assert
和更具描述性的错误消息,并且只需一行代码:

assert {:error, :nope} = MyModule.my_fun
=
不同,您可以在LHS上使用任何模式,尽管在这种情况下,
=
可以替换为
=
,因为LHS既是有效模式又是有效值

失败时,您将得到一条错误消息,这比不使用断言进行模式匹配要好,例如

  1) test the truth (MTest)
     test/m_test.exs:10
     match (=) failed
     code:  {:error, :nope} = MyModule.my_fun()
     right: {:error, :nop}
     stacktrace:
       test/m_test.exs:11: (test)

对我来说,在匹配项上使用assert的主要缺点是,在测试结果中无法得到左右比较。这是
assert{:error,:nope}=MyModule.my_fun
真的在测试什么吗?如果模式匹配,它基本上会断言元组
{:error,:nope}
是真的,不是吗?如果模式不匹配,仍然存在
匹配错误
@carp nope,将不会有任何
匹配错误
<代码>断言专门处理
=
。我刚才在答案中添加了一个测试失败输出示例。@Stuart是的,如果LHS是一个有效值,我会使用
=
获得漂亮的彩色差异,但如果它不是一个有效值,这比在测试中只做
模式=值
要好。@Dogbert非常正确,我想当断言atom结果时,
==
并不是真的需要。底线是始终使用断言:)