Elixir ja Phoenix: skaalautuva backend-kehitys · Oppitunti

Yksikkötestaus ExUnitilla

Kirjoittakaa nopeita ja luotettavia yksikkötestejä Elixir-moduuleille ja -funktioille sisäänrakennetulla ExUnit-kehyksellä.

Oppitunti 1/410 vaihetta

Yksikkötestaus ExUnitilla on ilmainen Elixir ja Phoenix: skaalautuva backend-kehitys-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Elixir ja Phoenix: skaalautuva backend-kehitys-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Elixir ja Phoenix: skaalautuva backend-kehitys-kurssilla on yhteensä 4 oppituntia.

Johdatus ExUnitiin

Tervetuloa yksikkötestaukseen ExUnitin avulla! ExUnit on Elixirin sisäänrakennettu testauskehys, joka on suunniteltu auttamaan luotettavan ja ylläpidettävän koodin kirjoittamisessa.

Yksikkötestit keskittyvät koodin pieniin, eristettyihin osiin, kuten yksittäisiin funktioihin tai moduuleihin. Ne varmistavat, että kukin osa toimii odotetusti, ja lisäävät luottamusta sovelluksen kasvaessa.

Ensimmäinen ExUnit-testisi

Elixirin testitiedostot päättyvät yleensä merkkijonoon _test.exs, ja ne sijoitetaan test/-hakemistoon. Tiedoston sisällä otat testausominaisuudet käyttöön komennolla use ExUnit.Case.

Testilohko alkaa komennolla test "description" do ... end. Tässä on yksinkertainen esimerkki:

defmodule MyMath do
  def add(a, b), do: a + b
end

defmodule MyMathTest do
  use ExUnit.Case, async: true

  test "adds two numbers correctly" do
    assert MyMath.add(1, 2) == 3
  end
end

Väittäminen komennolla `assert`

ExUnitin yleisin väite on assert. Se tarkistaa, palauttaako lauseke totuusarvon, jota Elixir pitää totena (kaiken muun paitsi arvot false ja nil).

Sitä käytetään usein odotettujen tulosten vertaamiseen todellisiin tuloksiin.

defmodule Calculator do
  def multiply(a, b), do: a * b
end

defmodule CalculatorTest do
  use ExUnit.Case, async: true

  test "multiplies positive numbers" do
    assert Calculator.multiply(2, 3) == 6
  end

  test "multiplies by zero" do
    assert Calculator.multiply(5, 0) == 0
  end
end

Kumoaminen komennolla `refute`

Joskus haluat varmistaa, että jokin ei ole totta. Tällöin käytät komentoa refute. Se on assert-komennon vastakohta.

refute onnistuu, jos sen argumentin arvoksi arvioituu epätosi arvo (false tai nil).

defmodule Validator do
  def is_negative(num), do: num < 0
end

defmodule ValidatorTest do
  use ExUnit.Case, async: true

  test "refutes positive numbers as negative" do
    refute Validator.is_negative(10)
    refute Validator.is_negative(0)
  end

  test "asserts negative numbers" do
    assert Validator.is_negative(-5)
  end
end

Poikkeusten testaaminen

Entä jos funktion pitäisi tietyissä tilanteissa nostaa virhe? assert_raise-komennolla voit testata tämän!

Annat odotetun poikkeustyypin ja valinnaisen viestin sekä funktion, jonka pitäisi aiheuttaa virhe.

defmodule Divider do
  def divide(a, b) do
    if b == 0, do: raise(ArgumentError, "Cannot divide by zero"), else: a / b
  end
end

defmodule DividerTest do
  use ExUnit.Case, async: true

  test "raises ArgumentError for division by zero" do
    assert_raise ArgumentError, "Cannot divide by zero", fn ->
      Divider.divide(10, 0)
    end
  end
end

Testikontekstin valmistelu

Monet testit tarvitsevat yhteisiä valmisteluja, kuten väliaikaisen resurssin tai testikäyttäjän luomisen. ExUnitin setup-takaisinkutsu suoritetaan ennen jokaista moduulin testiä.

Sen tulee palauttaa {:ok, assigns}, jossa assigns on avainsanalista tai kartta, joka on testifunktion argumenttien käytettävissä.

defmodule UserProfileTest do
  use ExUnit.Case, async: true

  setup do
    # This runs before each test
    user = %{id: 101, name: "Jane Doe", email: "jane@example.com"}
    {:ok, user: user, admin: true}
  end

  test "user has a name", %{user: user} do
    assert user.name == "Jane Doe"
  end

  test "context includes admin flag", %{admin: admin_status} do
    assert admin_status == true
  end
end

Testien ryhmittely komennolla `describe`

Testitiedostojen kasvaessa saatat haluta ryhmitellä toisiinsa liittyvät testit loogisesti. describe-makro auttaa järjestämään testit moduulin sisällä ja tekee testikokonaisuudesta helpommin luettavan.

Voit myös sisällyttää describe-lohkoja toistensa sisään!

defmodule StringUtils do
  def capitalize(str), do: String.capitalize(str)
  def reverse(str), do: String.reverse(str)
end

defmodule StringUtilsTest do
  use ExUnit.Case, async: true

  describe "capitalize/1" do
    test "capitalizes first letter" do
      assert StringUtils.capitalize("hello") == "Hello"
    end

    test "handles empty string" do
      assert StringUtils.capitalize("") == ""
    end
  end

  describe "reverse/1" do
    test "reverses a string" do
      assert StringUtils.reverse("world") == "dlrow"
    end
  end
end

Testien suorittaminen

Kun olet kirjoittanut testit, niiden suorittaminen on helppoa Elixirin rakennustyökalulla, Mixillä.

  • Kaikkien projektin testien suorittaminen: mix test
  • Tietyn tiedoston testien suorittaminen: mix test test/my_module_test.exs
  • Tietyn testin suorittaminen rivinumeron perusteella: mix test test/my_module_test.exs:10
  • Kuvauksen perusteella täsmäävien testien suorittaminen: mix test --only "adds two numbers"

ExUnit-haaste

Tarkastele seuraavaa Elixir-moduulia, joka tarkistaa, onko luku pariton. Millä ExUnit-väitteellä testataan oikein, että NumberChecker.is_odd(5) palauttaa arvon true?

defmodule NumberChecker do
  def is_odd(n) when is_integer(n) do
    rem(n, 2) != 0
  end
end

Yksikkötestauksen yhteenveto

Hienoa työtä! Olet käynyt läpi ExUnit-yksikkötestauksen perusteet.

  • ExUnit on Elixirin sisäänrakennettu testauskehys.
  • Testit määritellään _test.exs-tiedostoissa komennolla use ExUnit.Case.
  • assert tarkistaa tosiarvot ja refute epätosiarvot.
  • assert_raise varmistaa, että tietyt poikkeukset nostetaan.
  • setup-takaisinkutsut valmistelevat testikontekstin.
  • describe-lohkot auttavat järjestämään toisiinsa liittyvät testit.
  • Testit suoritetaan komennolla mix test.

Nämä taidot ovat ratkaisevan tärkeitä vankkojen ja luotettavien Elixir-sovellusten rakentamisessa!

Aloita maksutta

Opi Elixir tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Yksikkötestaus ExUnitilla” ilmainen?

Kyllä – oppitunnin ”Yksikkötestaus ExUnitilla” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Elixir ja Phoenix: skaalautuva backend-kehitys-kurssin, päivitä CoddyKit PROhon. Elixir ja Phoenix: skaalautuva backend-kehitys-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Yksikkötestaus ExUnitilla”?

Kirjoittakaa nopeita ja luotettavia yksikkötestejä Elixir-moduuleille ja -funktioille sisäänrakennetulla ExUnit-kehyksellä. Harjoittelet Elixir ja Phoenix: skaalautuva backend-kehitys-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Elixir ja Phoenix: skaalautuva backend-kehitys-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Elixir ja Phoenix: skaalautuva backend-kehitys-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Yksikkötestaus ExUnitilla”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Elixir ja Phoenix: skaalautuva backend-kehitys-oppitunnilla?

Kyllä. Jokainen Elixir ja Phoenix: skaalautuva backend-kehitys-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Yksikkötestaus ExUnitilla
  2. Phoenix-sovellusten integraatiotestaus
  3. Mockit, stubit ja testidata
  4. Ominaisuuspohjainen testaus StreamDatalla
← Takaisin: Elixir ja Phoenix: skaalautuva backend-kehitys