在eunit测试夹具中添加设置和拆卸方法的首选方法是什么?

时间:2015-03-11 23:34:09

标签: erlang eunit

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

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

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

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

我希望有一种更好的方式来激活它,这允许我编写测试方法而无需将它们明确地添加到此列表中。似乎应该有更好的支持吗?

2 个答案:

答案 0 :(得分:0)

关于fixtures learnyousomeerlang的段落很好地解释了使用eunit自动执行测试所能做的所有事情,但据我所知,你必须在某处列出测试断言,在平面或嵌套列表中。

还有一章关于common test可能对您有用。

答案 1 :(得分:0)

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

另一方面,如果您内联编写测试函数并使用"测试标题",您可以获得相应的自动注册:

$ 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.

在详细模式下运行时:

  <table width="100%" border="1">
            <tr><th>Cost</th><th>Action</th></tr>
            <tr>
                <td>30</td>
                <td><input type="checkbox" class="check_list" val="30"/></td>
            </tr>
            <tr>
                <td>20</td>
                <td><input type="checkbox" class="check_list" val="20"/></td>
            </tr>
            <tr>
                <td>25</td>
                <td><input type="checkbox" class="check_list" val="25"/></td>
            </tr>
            <tr>
                <td>35</td>
                <td><input type="checkbox" class="check_list" val="35"/></td>
            </tr>
            <tr><td style="text-align: right">Sum</td><td><span id="sum"></span></td></tr>
            <tr><td style="text-align: right">AVG</td><td><span id="avg"></span></td></tr>
        </table>