我想編寫測試,其中安裝和清理功能不會針對每個單獨的測試執行,而是會在測試開始和測試結束時執行一次。Erlang - Eunit設置功能不運行
所以我想是這樣的:
generator_test_() ->
{setup, fun setup/0, fun cleanup/1,
{inorder,
[
some_test1()
%...
]
}
}.
哪裏some_test1/0
是
some_test1() ->
begin
Value1 = something1(),
Value2 = something2(),
[?_assertEqual(Value1, Value2)]
end.
安裝不執行這種方式。
但這種方式:
some_test1() ->
?_test(begin
Value1 = something1(),
Value2 = something2(),
[?_assertEqual(Value1, Value2)]
end).
或
some_test1() ->
[?_assertEqual(something1(), something2())].
這一切都很好。
我不明白它爲什麼可行,我的問題是我不能在?_test(....)中寫入多個斷言。
some_test1() ->
?_test(begin
Value1 = something1(),
Value2 = something2(),
[?_assertEqual(Value1, Value2),
?_assertEqual(Value1, Value2)]
end).
通過運行eunit:test(my_module, [verbose]).
我看到只有1個測試通過了。
UPDATE
例1
一個小例子:
-module(example).
-include_lib("eunit/include/eunit.hrl").
generator_test_() ->
{setup, fun setup/0, fun cleanup/1,
{inorder,
fun() -> some_test1() end
}
}.
some_test1() ->
begin
X = 3,
Y = 4,
%%% This is a test set/deep list as it
%%% contains two tests.
[?_assertEqual(X, Y),
?_assertEqual(ok, ok)]
end.
setup() ->
erlang:display("---SETUP CALLED---"),
"setup".
cleanup(_) ->
ok.
運行eunit:
eunit:test(example, [verbose]).
======================== EUnit ========================
"---SETUP CALLED---"
module 'example'
example: generator_test_...ok
[done in 0.004 s]
=======================================================
Test passed.
ok
小修改:
some_test1() ->
begin
X = 3,
Y = 4,
%%% This is a test set/deep list as it
%%% containst two tests.
[?_assertEqual(X, Y),
?_assertEqual(it_doesnt_work, ok)]
end.
而且測試仍然通過。
例2
然而
some_test1() ->
begin
X = 3,
Y = 4,
%%% These are just two simple tests
?assertEqual(X, Y),
?assertEqual(it_doesnt_work, ok)
end.
失敗
eunit:test(example, [verbose]).
======================== EUnit ========================
"---SETUP CALLED---"
module 'example'
example: generator_test_...*failed*
in function example:'-some_test1/0-fun-0-'/1 (example.erl, line 17)
in call from example:some_test1/0 (example.erl, line 17)
**error:{assertEqual_failed,[{module,example},
{line,17},
{expression,"Y"},
{expected,3},
{value,4}]}
[done in 0.003 s]
=======================================================
Failed: 1. Skipped: 0. Passed: 0.
error
BUT
示例3
generator_test_() ->
{setup, fun setup/0, fun cleanup/1,
{inorder,
some_test1()
}
}.
some_test1() ->
[?_assertEqual(3, 3),
?_assertEqual(ok, ok)].
eunit:test(example, [verbose]).
======================== EUnit ========================
"---SETUP CALLED---"
module 'example'
example:13: some_test1...ok
example:14: some_test1...ok
[done in 0.005 s]
=======================================================
All 2 tests passed.
ok
現在我看到有2(!)測試。
我可能只是忘記了塊語句,並寫出沒有變量的測試,但我認爲這可能是可怕的閱讀,它應該與塊。
安裝程序會與您的解決方案一起運行,但測試不會運行。 通過運行eunit,generator_test_/0運行,但在some_test1/0中編寫任何?_assert宏不會做出更改。通過運行詳細模式,我沒有看到?_assert測試,並且例如編寫?_assertEqual(3,4)遍。 – otisonoza 2013-04-26 13:39:19
寫入?assertEqual(3,4)失敗,但eunit認爲它是一個測試,但有2個斷言。 – otisonoza 2013-04-26 13:45:37
在測試中,您應該只使用?assert *宏,而不是?_assert *宏。請提供有問題的代碼。 – 2013-04-26 19:28:59