---
title: Test en quatre phases
teaser: 'Un test à quatre phases est un test qui se déroule en quatre phases successives
  : initialisation, exécution, assertion et finalisation. C''est une approche qui
  permet de découpler les différentes étapes d''un test et de rendre les tests plus
  lisibles.

  '
tags: web,ruby,testing
author: Dan Croak
published_on: 2012-09-28
---

Le [test en quatre phases](http://xunitpatterns.com/Four%20Phase%20Test.html) est
un modèle de test, applicable à tous les langages de programmation et à tous les tests
unitaires (mais pas aux tests d'intégration).

Il se présente sous la forme générale suivante :

```ruby
test do
  setup
  exercise
  verify
  teardown
end
```

Le test comporte quatre phases distinctes. Elles sont exécutées de manière
séquentielle.

## configuration

Au cours de la configuration, le système à tester (généralement une classe, un objet
ou une méthode) est mis en place.

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

## exercice

Pendant la phase d'exercice, le système testé est exécuté.

```ruby
user.save
```

## vérification

Pendant la vérification, le résultat de l'exercice est comparé aux attentes du
développeur.

```ruby
user.encrypted_password.should_not be_nil
```

## démontage

Pendant le démontage, le système testé est remis dans son état initial.

Cette opération est généralement gérée implicitement par le langage
(libération de la mémoire) ou le cadre de test (exécution à l'intérieur d'une
transaction de base de données).

## tous ensemble

Les quatre phases sont regroupées dans un test nommé qui peut être référencé
individuellement.

Notre [guide de style](https://github.com/thoughtbot/guides/tree/master/style)
conseille de "Séparer les phases d'installation, d'exercice, de vérification
et de démontage avec des lignes nouvelles".

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

  user.save

  user.encrypted_password.should_not be_nil
end
```

Allez-y et testez par phases.
