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