使用Elixir的ExUnit进行单元测试,每个人似乎都对测试失败消息感到兴奋。但是,如果我测试的不是==,则似乎看不到任何有用的错误消息。
例如
assert String.contains(my_string, "expected string")
Expected truthy, got false
Run Code Online (Sandbox Code Playgroud)
我更喜欢编写测试,以便使我的失败更有意义,从而使我能够快速迭代他们提供的反馈。有没有办法使测试失败的信息更多?例如
Expected "an unexpected string" to contain "expected string"
Run Code Online (Sandbox Code Playgroud)
对于针对进行测试的特殊情况String.contains?,您可以考虑使用regex match运算符=~,因为它将开箱即用地报告更好的测试失败消息。
通常,虽然ExUnit assert不了解标准库中每个函数的内部语义。这就是为什么您可以提供自定义错误消息的原因:
assert String.contains?(my_string, "expected string"),
~s(Expected #{inspect my_string} to contain "expected string")
Run Code Online (Sandbox Code Playgroud)
如果您有许多断言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
Run Code Online (Sandbox Code Playgroud)
以下是这些表达式assert,它们refute将识别并定制Elixir 1.3中的输出:
= 匹配运算符match?/2 功能! 否定== 等式运算符< 少于> 比...更棒<= 小于或等于>= 大于或等于=== 严格相等(区分浮点数和整数)=~ 正则表达式匹配运算符!== 严格的不平等!= 不等式in 枚举成员大多数这些得到同样的特殊待遇:他们是中缀操作符,并assert在将报告lhs,rhs值它看到。