Elixir:
Pisanie testów
Jak to zrobić:
Elixir używa ExUnit jako wbudowanego frameworka do testów, który jest niezwykle potężny i łatwy w użyciu. Oto podstawowy przykład:
- Utwórz nowy plik testowy w katalogu
test
Twojego projektu Elixir. Na przykład, jeśli testujesz moduł o nazwieMathOperations
, Twój plik testowy może byćtest/math_operations_test.exs
.
# test/math_operations_test.exs
defmodule MathOperationsTest do
use ExUnit.Case
# To jest prosty przypadek testowy do sprawdzenia funkcji dodawania
test "dodawanie dwóch liczb" do
assert MathOperations.add(1, 2) == 3
end
end
Aby uruchomić swoje testy, użyj komendy mix test
w terminalu. Jeśli funkcja MathOperations.add/2
poprawnie dodaje dwie liczby, zobaczysz wyjście podobne do:
..
Finished in 0.03 seconds
1 test, 0 failures
Dla testów obejmujących zewnętrzne usługi lub API, możesz chcieć używać bibliotek do mockowania, takich jak mox
, aby unikać uderzania w rzeczywiste usługi:
- Dodaj
mox
do swoich zależności wmix.exs
:
defp deps do
[
{:mox, "~> 1.0.0", only: :test},
# inne zależności...
]
end
- Zdefiniuj moduł mockujący w swoim pomocniku testowym (
test/test_helper.exs
):
Mox.defmock(HTTPClientMock, for: HTTPClientBehaviour)
- Użyj mocka w swoim przypadku testowym:
# test/some_api_client_test.exs
defmodule SomeAPIClientTest do
use ExUnit.Case
import Mox
# To mówi Mox'owi, aby zweryfikował, że ten mock został wywołany zgodnie z oczekiwaniami
setup :verify_on_exit!
test "otrzymuje dane z API" do
# Przygotuj odpowiedź mocka
expect(HTTPClientMock, :get, fn _url -> {:ok, "Zmockowana odpowiedź"} end)
assert SomeAPIClient.get_data() == "Zmockowana odpowiedź"
end
end
Podczas uruchamiania mix test
, ta konfiguracja pozwala izolować twoje testy jednostkowe od rzeczywistych zewnętrznych zależności, skupiając się na zachowaniu własnego kodu. Ten wzorzec zapewnia, że twoje testy działają szybko i pozostają niezawodne, niezależnie od statusu zewnętrznych usług czy łączności internetowej.