Elixir:
Rédaction de tests
Comment faire :
Elixir utilise ExUnit comme son framework de test intégré, qui est extrêmement puissant et facile à utiliser. Voici un exemple basique :
- Créez un nouveau fichier de test dans le répertoire
test
de votre projet Elixir. Par exemple, si vous testez un module nomméMathOperations
, votre fichier de test pourrait êtretest/math_operations_test.exs
.
# test/math_operations_test.exs
defmodule MathOperationsTest do
use ExUnit.Case
# Ceci est un cas de test simple pour vérifier la fonction d'addition
test "l'addition de deux nombres" do
assert MathOperations.add(1, 2) == 3
end
end
Pour exécuter vos tests, utilisez la commande mix test
dans votre terminal. Si la fonction MathOperations.add/2
ajoute correctement deux nombres, vous verrez une sortie similaire à :
..
Terminé en 0.03 secondes
1 test, 0 échecs
Pour les tests impliquant des services externes ou des API, vous voudrez peut-être utiliser des bibliothèques de simulacres, comme mox
, pour éviter de toucher les services réels :
- Ajoutez
mox
à vos dépendances dansmix.exs
:
defp deps do
[
{:mox, "~> 1.0.0", only: :test},
# autres dépendances...
]
end
- Définissez un module de simulation dans votre aide de test (
test/test_helper.exs
) :
Mox.defmock(HTTPClientMock, pour: HTTPClientBehaviour)
- Utilisez la simulation dans votre cas de test :
# test/some_api_client_test.exs
defmodule SomeAPIClientTest do
use ExUnit.Case
import Mox
# Cela indique à Mox de vérifier que cette simulation a été appelée comme prévu
setup :verify_on_exit!
test "obtient des données de l'API" do
# Préparez la réponse simulée
expect(HTTPClientMock, :get, fn _url -> {:ok, "Réponse simulée"} end)
assert SomeAPIClient.get_data() == "Réponse simulée"
end
end
Lors de l’exécution de mix test
, cette configuration vous permet d’isoler vos tests unitaires des véritables dépendances externes, en vous concentrant sur le comportement de votre propre code. Ce schéma garantit que vos tests s’exécutent rapidement et restent fiables, indépendamment du statut des services externes ou de la connectivité Internet.