Elixir:
Testien kirjoittaminen

Kuinka:

Elixir käyttää sisäänrakennettuna testikehyksenään ExUnitia, joka on erittäin tehokas ja helppokäyttöinen. Tässä on yksinkertainen esimerkki:

  1. Luo uusi testitiedosto test-hakemistoon Elixir-projektissasi. Esimerkiksi, jos testaat moduulia nimeltä MathOperations, testitiedostosi voisi olla test/math_operations_test.exs.
# test/math_operations_test.exs
defmodule MathOperationsTest do
  use ExUnit.Case

  # Tämä on yksinkertainen testitapaus tarkistamaan yhteenlaskufunktion
  test "kahden numeron yhteenlasku" do
    assert MathOperations.add(1, 2) == 3
  end
end

Suorittaaksesi testisi, käytä mix test-komentoa terminaalissasi. Jos MathOperations.add/2-funktio laskee kaksi numeroa oikein yhteen, näet tulosteen, joka on samankaltainen kuin:

..

Valmis 0.03 sekunnissa
1 testi, 0 epäonnistumista

Testeissä, jotka liittyvät ulkoisiin palveluihin tai API:hin, saatat haluta käyttää mock-kirjastoja, kuten mox, välttääksesi oikeiden palveluiden käytön:

  1. Lisää mox riippuvuuksiisi mix.exs-tiedostoon:
defp deps do
  [
    {:mox, "~> 1.0.0", only: :test},
    # muita riippuvuuksia...
  ]
end
  1. Määritä mock-moduuli testiapurissasi (test/test_helper.exs):
Mox.defmock(HTTPClientMock, for: HTTPClientBehaviour)
  1. Käytä mockia testitapauksessasi:
# test/some_api_client_test.exs
defmodule SomeAPIClientTest do
  use ExUnit.Case
  import Mox

  # Tämä käskee Moxia varmistamaan, että tämä mock kutsuttiin odotetulla tavalla
  setup :verify_on_exit!

  test "hakee dataa API:sta" do
    # Aseta mock-vastaus
    expect(HTTPClientMock, :get, fn _url -> {:ok, "Mock-vastaus"} end)
    
    assert SomeAPIClient.get_data() == "Mock-vastaus"
  end
end

Kun suoritat mix test, tämä asetus mahdollistaa yksikkötestiesi eristämisen todellisista ulkoisista riippuvuuksista, keskittyen oman koodisi käyttäytymiseen. Tämä malli varmistaa, että testisi suoritetaan nopeasti ja pysyvät luotettavina riippumatta ulkoisen palvelun tilasta tai internet-yhteydestä.