Elixir:测试失败消息
问题描述:
使用Elixir的ExUnit进行单元测试,每个人似乎都对测试失败消息感到兴奋。但是,如果我正在测试除==
以外的其他任何内容,我似乎无法获得有用的错误消息。Elixir:测试失败消息
例如
assert String.contains(my_string, "expected string")
Expected truthy, got false
我宁愿让我的失败是更多的信息来写我的测试,让我很快对他们给出的反馈循环。有没有办法获得更丰富的测试失败?例如
Expected "an unexpected string" to contain "expected string"
答
对于测试的特定情况下对String.contains?
,你可以考虑的正则表达式匹配操作符=~
,因为它会报告一个更好的测试失败消息开箱。
一般来说,ExUnit的assert
不会知道标准库中每个函数的内部语义。这就是为什么你可以提供一个自定义错误消息:
assert String.contains?(my_string, "expected string"),
~s(Expected #{inspect my_string} to contain "expected string")
如果您有许多声称为String.contains?/2
,您可以定义自己的说法:
def assert_contains(string, substring) do
assert String.contains?(string, substring),
"Expected #{inspect string} to contain #{inspect substring}"
end
test "my string" do
assert_contains my_string, "expected string"
end
这里是表达assert
和refute
将承认并定制输出在药剂1.3:
-
=
匹配运算符 -
match?/2
功能 -
!
否定 -
==
相等运算 -
<
小于 -
>
大于 - 比
<=
小于或等于 - 更大
>=
大于或等于 -
===
全等(区分花车和整数) -
=~
正则表达式匹配操作 -
!==
不全 -
!=
不平等 -
in
成员枚举
大多数这些得到同样的特殊待遇:他们是中缀运营商和assert
会报告在它看到的lhs
,rhs
值。
你可以编写一个'assert_contains'宏来执行此操作,或者将自定义消息传递给'assert',它将在失败时打印,但我不确定你正在寻找什么样的解决方案。 – Dogbert
所有资产都是检查真实性。您可以提供一条消息,但是它本身并不会反省您在运行时产生结果的内容。这已在之前发布,例如https://groups.google.com/forum/m/#!主题/ elixir-lang-core/KYAkagiKr0w,但这仍然不像你所要求的那样是自动的。 –