没有 assert/refute 的 ExUnit,完全依赖模式匹配?
ExUnit without assert/refute, relying solely on pattern matching?
我正在测试函数的 return 值。两者中哪一个是首选方式?
test "extra verbose, using assert" do
{:error, reason} = MyModule.my_fun
assert reason == :nope
end
test "using pattern matching only" do
{:error, :nope} = MyModule.my_fun
end
我喜欢第一个,因为我现在不喜欢,测试需要 assert
语句,而 运行 测试时的错误消息更具描述性。 Otoh,带行号的MatchError
应该也够了。
您可以将 assert
与 =
一起使用以获得 assert
和更具描述性的错误消息,并且只需一行代码:
assert {:error, :nope} = MyModule.my_fun
与 ==
不同,您可以在 LHS 上使用任何模式,但在这种情况下,=
可以替换为 ==
,因为 LHS 既是有效模式又是值。
失败时,您会收到一条错误消息,这比仅在没有 assert
的情况下进行模式匹配要好,例如
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)
我正在测试函数的 return 值。两者中哪一个是首选方式?
test "extra verbose, using assert" do
{:error, reason} = MyModule.my_fun
assert reason == :nope
end
test "using pattern matching only" do
{:error, :nope} = MyModule.my_fun
end
我喜欢第一个,因为我现在不喜欢,测试需要 assert
语句,而 运行 测试时的错误消息更具描述性。 Otoh,带行号的MatchError
应该也够了。
您可以将 assert
与 =
一起使用以获得 assert
和更具描述性的错误消息,并且只需一行代码:
assert {:error, :nope} = MyModule.my_fun
与 ==
不同,您可以在 LHS 上使用任何模式,但在这种情况下,=
可以替换为 ==
,因为 LHS 既是有效模式又是值。
失败时,您会收到一条错误消息,这比仅在没有 assert
的情况下进行模式匹配要好,例如
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)