0

所以我想添加一个在所有其他测试之前执行的方法,以及在所有测试完成后执行的另一个方法,例如:

test_setup() -> {whatever}.
test_teardown(_) -> {whatever}.

我知道我可以通过明确说明所有测试在单个测试中运行来“手动”执行此操作:

fixture_test_() ->
  {
    setup,
    fun test_setup/0,
    fun test_teardown/1,
    [test_something/0]
  }
.

我希望有一种更好的方法来激活它,这样我就可以编写测试方法而无需将它们显式添加到此列表中。似乎应该对此有更好的支持?

4

2 回答 2

1

learnyousomeerlang上关于fixtures的段落很好地解释了使用eunit 自动化测试可以做的所有事情,但据我所知,您必须在某个地方列出测试断言,在平面或嵌套列表中。

还有一章是关于常见测试的,您可能会感兴趣。

于 2015-03-12T05:26:43.297 回答
0

正如 Pascal 所写,不幸的是 EUnit 没有测试用例自动注册。

另一方面,如果你内联编写测试函数并使用“测试标题”,你可以获得自动注册的等价物:

fixture_test_() ->
    {
        setup,
        fun test_setup/0,
        fun test_teardown/1,
        [
            % Simplest possible. One single assertion.
            % Note the presence of the "_" prefix.
            {"description of test case 1",
             ?_assert(true)
            },
            % Slighly more complicated: multiple assertions inside a list.
            % Note the presence of the "_" prefix.
            {"description of test case 2", [
                ?_assert(true),
                ?_assert(true),
                ?_assert(true)
            ]},
            % Even more complicated, when you really need a function.
            % Note the absence of the "_" prefix.
            {"description of test case 3",
             fun() ->
                 X = f1(),
                 Y = f2(X),
                 ?assertEqual(foo, Y)
             end}
        ]
    }.

在详细模式下运行时:

$ rebar eunit suite=pizza
==> mcs (eunit)
======================== EUnit ========================
module 'pizza'
  module 'pizza_tests'
    pizza_tests:29: fixture_test_ (description of test case 1)...ok
    description of test case 2
      pizza_tests:34: fixture_test_...ok
      pizza_tests:35: fixture_test_...ok
      pizza_tests:36: fixture_test_...ok
      [done in 0.009 s]
    pizza_tests: fixture_test_ (description of test case 3)...ok
    [done in 0.015 s]
  [done in 0.015 s]
=======================================================
  All 5 tests passed.
于 2016-01-16T22:03:28.397 回答