Elixir:测试失败消息
Elixir: Test failure messages
使用 Elixir 的 ExUnit 进行单元测试,每个人似乎都对测试失败消息感到兴奋。但是,如果我测试的不是 ==
,我似乎无法获得有用的错误消息。
例如
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
将在 Elixir 1.3 中识别和定制输出:
=
匹配运算符
match?/2
函数
!
否定
==
相等运算符
<
小于
>
大于
<=
小于等于
>=
大于等于
===
严格相等(区分浮点数和整数)
=~
正则表达式匹配运算符
!==
严格不等式
!=
不平等
in
可枚举成员
其中大部分得到相同的特殊待遇:它们是中缀运算符,assert
将报告它看到的 lhs
、rhs
值。
使用 Elixir 的 ExUnit 进行单元测试,每个人似乎都对测试失败消息感到兴奋。但是,如果我测试的不是 ==
,我似乎无法获得有用的错误消息。
例如
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
将在 Elixir 1.3 中识别和定制输出:
=
匹配运算符match?/2
函数!
否定==
相等运算符<
小于>
大于<=
小于等于>=
大于等于===
严格相等(区分浮点数和整数)=~
正则表达式匹配运算符!==
严格不等式!=
不平等in
可枚举成员
其中大部分得到相同的特殊待遇:它们是中缀运算符,assert
将报告它看到的 lhs
、rhs
值。