Four-Phase Test

Dan Croak
This article is also available in: français

The Four-Phase Test is a testing pattern, applicable to all programming languages and unit tests (not so much integration tests).

It takes the following general form:

test do
  setup
  exercise
  verify
  teardown
end

There are four distinct phases of the test. They are executed sequentially.

setup

During setup, the system under test (usually a class, object, or method) is set up.

user = User.new(password: 'password')

exercise

During exercise, the system under test is executed.

user.save

verify

During verification, the result of the exercise is verified against the developer’s expectations.

user.encrypted_password.should_not be_nil

teardown

During teardown, the system under test is reset to its pre-setup state.

This is usually handled implicitly by the language (releasing memory) or test framework (running inside a database transaction).

all together

The four phases are wrapped into a named test to be referenced individually.

Our style guide advises we “Separate setup, exercise, verification, and teardown phases with newlines.”

it 'encrypts the password' do
  user = User.new(password: 'password')

  user.save

  user.encrypted_password.should_not be_nil
end

Go forth and test in phases.