Lua Academy · Oppitunti

Koodikattavuus ja testien instrumentointi

Mitatkaa testikattavuutta luacovilla ja tulkitkaa kattavuusraportteja.

Oppitunti 4/413 vaihetta

Koodikattavuus ja testien instrumentointi on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.

Mitä koodikattavuus on

Koodikattavuus mittaa, mitkä koodin rivit, haarat tai funktiot testit suorittavat. Suuri kattavuus lisää luottamusta siihen, että testit kattavat koodin hyvin.

luacov: vakiotyökalu

luacov on Lua-kielen vakiotyökalu kattavuuden mittaamiseen. Se kytkeytyy Luan debug-kerrokseen ja tallentaa suoritetut rivit.

-- Run with luacov:
luacov script.lua
-- Or require at the start of the test file:
require("luacov")

luacovin käyttäminen testiajon kanssa

Käyttäkää busted-testikehyksen tai mukautetun testiajon kanssa luacovia vaatimalla se ohjelman alussa, jolloin se tallentaa kattavuuden automaattisesti.

-- spec/all_spec.lua
require("luacov")
describe("my module", function()
  it("does something", function()
    local m = require("mymodule")
    assert.equals(m.add(1,2), 3)
  end)
end)

Raportin luominen

Testien suorittamisen jälkeen luacov kirjoittaa tiedoston luacov.stats.out. Suorittakaa luacov-reporter ihmisen luettavan raportin luomiseksi.

# After tests:
luacov-reporter
# Produces luacov.report.out with per-file line coverage

Raportin lukeminen

Jokaisella rivillä näkyvät osumien määrä, ohitusten määrä ja lähdekoodirivi. Rivit, joihin ei osuta kertaakaan, ovat kattamatonta koodia – mahdollisesti kuollutta koodia tai puuttuvia testitapauksia.

Haarakattavuus

luacov seuraa rivikattavuutta, ei haarakattavuutta. Haarakattavuutta varten käyttäkää kehittyneempää työkalua tai lisätkää manuaalisesti testitapaukset jokaiselle if/else-polulle.

Mukautettu kattavuushook

Rakentakaa debug.sethook-funktiolla minimaalinen kattavuuden tallennin rivitapahtumia varten.

local covered = {}
debug.sethook(function(event, line)
  local info = debug.getinfo(2, "S")
  local src = info.short_src
  covered[src] = covered[src] or {}
  covered[src][line] = (covered[src][line] or 0) + 1
end, "l")
-- ... run tests ...
debug.sethook()

Kattavuuskynnykset

Asettakaa CI:ssä kattavuudelle vähimmäiskynnys (esimerkiksi 80 %). Epäonnistuttakaa koonti, jos kattavuus laskee sen alle. Näin estätte kuolleen koodin kertymisen vahingossa.

Testien instrumentointimallit

Kattavuuden lisäksi instrumentoikaa testit seuraavasti: suoritusajan mittaus (hitaiden testien havaitsemiseen), kutsumäärien assert-tarkistukset (funktioiden odotetun kutsumäärän varmistamiseen) ja arvojen tallennus (mock-funktioille välitettyjen argumenttien tallentamiseen).

Mockit testien eristämiseen

Korvatkaa todelliset moduulit testeissä mockeilla yksiköiden eristämiseksi. Tallentakaa todellinen funktio, korvatkaa se kutsuja seuraavalla stubilla ja palauttakaa alkuperäinen funktio testin jälkeen.

local realSend = http.send
local calls = {}
http.send = function(...) calls[#calls+1] = {...} end
-- run tests --
http.send = realSend  -- restore
print(#calls, "send calls")

Integrointi CI:n kanssa

Suorittakaa luacov CI-putkessanne. Ladatkaa kattavuusraportit Coveralls- tai Codecov-palveluun eri commitien välisten trendien seurantaa varten.

Kattavuutta koskeva kysymys

Mitä luacov-raportissa ilmaisee rivi, jolla on 0 osumaa?

Kertaus: koodikattavuus ja testien instrumentointi

Käyttäkää luacov-työkalua rivikattavuuden tallentamiseen ja raporttien luomiseen. Asettakaa CI-ympäristön kattavuusrajat. Lisätkää mukautettua debug.sethook-instrumentointia erityisseurantaa varten. Käyttäkää mock-objekteja yksikkötestien eristämiseen ja kutsumäärien tarkistamiseen.

Aloita maksutta

Opi Lua 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
40
Oppitunnit
159

Usein kysytyt kysymykset

Onko oppitunti ”Koodikattavuus ja testien instrumentointi” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Koodikattavuus ja testien instrumentointi”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Koodikattavuus ja testien instrumentointi”?

Mitatkaa testikattavuutta luacovilla ja tulkitkaa kattavuusraportteja. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Koodikattavuus ja testien instrumentointi”-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ä Lua Academy-oppitunnilla?

Kyllä. Jokainen Lua Academy-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. debug-kirjasto syvällisesti
  2. Etävirheenkorjaus MobDebugilla
  3. Profilointi LuaProfilerilla
  4. Koodikattavuus ja testien instrumentointi
← Takaisin: Lua Academy