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
testTwojego 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
endAby 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 failuresDla 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
moxdo 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
endPodczas 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.