56net亚洲必赢-www.56.net-必赢56net登录网址

热门关键词: 56net亚洲必赢,www.56.net,必赢56net登录网址,必赢56net

elixir 中自带了单元测试框架

2019-12-01 13:15 来源:未知

概述

elixir 中自带了单元测验框架 ExUnit ,此中提供单元测验的意气风发三种,重要含有以下模块:

  1. ExUnit: 单元测验框架
  2. ExUnit.Assertions: 断言
  3. ExUnit.Case: 测试用例
  4. ExUnit.DocTest: 在讲授写测验用例,相符 python 的 doctest
  5. ExUnit.Callbacks: 单元测验中回调
  6. ExUnit.CaseTemplate: 测量检验用例模板,用在有恢宏同类测验的情况
  7. ExUnit.Test: 单元测量检验音讯,用于描述单元测验本身,也就是单元测验的元数据
  8. ExUnit.TestCase: 测量检验用例信息,用于描述单元测验用例本人,约等于测量试验用例的元数据
  9. ExUnit.CaptureIO 和 ExUnit.CaptureLog: 协助测验时拿到 IO 和 log 的出口
  10. ExUnit.Formatter: 格式化测验输出的音信
  11. ExUnit.Filters: 调节测量检验用例的过滤

平时主要使用的模块是 ExUnit.Assertions,ExUnit.Case,ExUnit.DocTest

单元测量检验

上面通过各个测验用例的景色,来其实使用方面提到的次第模块。

构造一个测量试验场景

为了轻巧,假定测验的对象是一个总结器,包蕴基本的加减乘除运算。 创造工程,然后增加 加减乘除 四个情势:

$ mix new calc
* creating README.md
* creating .gitignore
* creating mix.exs
* creating config
* creating config/config.exs
* creating lib
* creating lib/calc.ex
* creating test
* creating test/test_helper.exs
* creating test/calc_test.exs

Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:

    cd calc
    mix test

Run "mix help" for more commands.

工程自动生成的代码 lib/calc.ex 中包涵一个示例函数 hello

defmodule Calc do
  @moduledoc """
  Documentation for Calc.
  """

  @doc """
  Hello world.

  ## Examples

      iex> Calc.hello
      :world

  """
  def hello do
    :world
  end
end

上面的 ##Examples 下的正是 doctest

然后,在地方的 Calc module 中加进4个轻易的带测量检验函数:

def add(x, y) do
  x y
end

def minus(x, y) do
  x-y
end

def mul(x, y) do
  x*y
end

def division(x, y) do
  div x, y
end

丰裕测验case (test/calc_test.exs)

针对地点4个章程,各写几个测量试验 case 如下:

defmodule CalcTest do
  use ExUnit.Case

  test "add method test" do
    assert Calc.add(3, 3) == 6
  end

  test "add method test 2" do
    refute Calc.add(3, 3) == 5
  end

  test "minus method test" do
    assert Calc.minus(3, 3) == 0
  end

  test "multiply method test" do
    assert Calc.mul(3, 3) == 9
  end

  test "division method test" do
    assert Calc.division(3, 3) == 1
  end
end

其间,test 方法来自于模块 ExUnit.Case, assert,refute 等源于于 ExUnit.Assertions 模块。 别的 assertion 参照他事他说加以侦查:

安装统朝气蓬勃的测量检验参数

上面包车型大巴测量检验是最大旨的现身说法,上边的测验用例中每种用例的参数都是(3,3卡塔尔,可以用 setup 方法统蓬蓬勃勃安装各种case的同样参数。

defmodule CalcTest do
  use ExUnit.Case, async: true

  setup do
    {:ok, [x: 3, y: 3]}
  end

  test "add method test", context do
    assert Calc.add(context[:x], context[:y]) == 6
  end

  test "add method test 2", context do
    refute Calc.add(context[:x], context[:y]) == 5
  end

  test "minus method test", context do
    assert Calc.minus(context[:x], context[:y]) == 0
  end

  test "multiply method test", context do
    assert Calc.mul(context[:x], context[:y]) == 9
  end

  test "division method test", context do
    assert Calc.division(context[:x], context[:y]) == 1
  end
end

除了 setup,还有 setup_all 方法也足以设置每种 case 的共通参数。 不相同之处在于 setup 各类 test 实施在此以前都会运转。

测量试验中的回调

测量试验回调除了上边的 setup 和 setup_all 之外,还会有一个 on_exit 回调,在每一回测量检验case执行完之后运营。 以上回调归属 ExUnit.Callbacks 模块。

上面的setup中加入 on_exit 的回调:

setup context do
  on_exit fn ->
    IO.puts "#{context[:test]} finished!"
  end

  {:ok, [x: 3, y: 3]}
end

context[:test] 中是种种 test 后跟的字符串。 改良后进行结果如下:

$ mix test
test multiply method test finished!
.test add method test 2 finished!
.test add method test finished!
.test division method test finished!
.test minus method test finished!
.

Finished in 0.04 seconds
5 tests, 0 failures

Randomized with seed 604679

总结

elixir 中自带了一揽子的单元测量检验库,不过从未 mock 库,因为 elixir 社区不推荐使用 mock, 社区感觉要是代码固守优质的设计标准,就能比较轻松测量检验。

其余,ExUnit 中的还某个模块没有品味,今后在实际上用届时再写相应的资历。

版权声明:本文由56net亚洲必赢发布于养生心得,转载请注明出处:elixir 中自带了单元测试框架