View Source Criterion (Criterion v0.1.15)

A framework to write unit tests as a list of steps. It can be used to write tests in a BDD style.

Usage

  • Define a feature using feature/2 macro
  • Define scenarios under the feature using the scenario/2 macro.
  • Inside each scenario, define steps using step/2 block.
  • Steps can have either inline or external implementation.
  • External implementations can be reused and can be defined using defstep/2 macro.

Example

defmodule CriterionTest do
  use ExUnit.Case
  import Criterion

  feature "Math" do
    setup do
      {:ok, pi: 3.14}
    end

    scenario "Square" do
      # Step with external implementation
      step("Given a number greater than 5",
        via: &random_number/2,
        where: [min: 2] # Options passed as second argument to the function
      )

      # Step with inline implementation
      step "When the number is multiplied by it self", %{number: number} do
        result = number * number
        %{result: result} # will be merged to the test context
      end

      step "Then the result is greater than the number", %{result: result, number: number} do
        assert result > number
      end

      # You can access data from the initial context of the test
      step "And pi is a constant", %{pi: pi} do
        assert pi == 3.14
      end
    end

    # External step implementation
    defstep random_number(_context, args) do
      min = args[:min] || 0
      %{number: min + Enum.random(0..100)}
    end
  end
end

Summary

Functions

Link to this macro

defstep(func, list)

View Source (macro)
Link to this macro

feature(description, list)

View Source (macro)
Link to this macro

scenario(description, list)

View Source (macro)