Gyakran ismételt kérdések

K. Mi okozza egy sor részleges lefedettségét (megjelenítés sárga jelzéssel)?

V. Sor akkor kerül részlegesen lefedettként kijelzésre, ha a kód nem minden ága kerül végrehajtásra.

Erre néhány példa:

  1. Kivételkezelők:

  2. try {
    methodA() // methodA throws Exception
    } catch (Exception e) {..}

    A methodA metódust hívó sor részlegesen lefedett, mivel két útvonal létezik: vagy kivétel kerül dobásra, vagy nem kerül kivétel dobásra és a program normál módon lefut. Abban az esetben ha nem kerül sor kivétel dobására, akkor részleges lefedettség kerül kijelzésre, mert az elkapás soha nem kerül végrehajtásra.

  3. Megosztott konstruktor kód:
  4. A fenti példában a 4. sor részlegesen lefedettként van megjelölve. Figyelje meg, hogy a példányváltozó inicializálási kódja mindenképpen végrehajtásra kerül, függetlenül attól, hogy az objektumpéldány melyik konstruktor segítségével kerül létrehozásra. A fordító az inicializálási kódot mindkét konstruktorban elhelyezi. A fenti kód tehát nagyjából egyenértékű a következővel:

    Mivel csak egy konstruktor használatára kerül sor, a másik végrehajtási útvonal nem fut le és részleges lefedettség kerül kijelzésre.

K. A kódlefedettség jelentésekben miért van az, hogy a csomag esetében jelentett összes sor száma nem mindig egyenlő az adott csomagban lévő osztályok esetében megjelenített összeggel?

V. Amikor csomag összes sorának jelentésére kerül sor, akkor a metódusok között megosztott sorok kiesnek és nem kerülnek duplán beleszámolásra.

K. Az osztálymeghatározások (például a Foo {..} nyilvános osztály) miért vannak nem lefedettként (vörös) vagy részlegesen lefedettként (sárga) megjelölve?

V. Ha az osztálynak nincs kifejezett alapértelmezett konstruktora, akkor a fordító előállít egyet, és mivel ez beleértett, ezért elképzelhető, hogy az adott kódsorhoz tartozik. Másodszor, ha statikus inicializálási kóddal rendelkezik (például statikus mezőkkel), akkor a fordító statikus inicializálási blokkokat állít elő, amelyek szintén ahhoz a sorhoz lehetnek társítva.

K. Miért jelennek meg a lefedettség jelzések a Csomagböngészőben vörös színnel, annak ellenére, hogy a lefedett százalék az elfogadható lefedettségi szintet meghaladja?

V. Ha több elfogadhatósági feltétel van beállítva (például metódus ÉS blokk), akkor a jelzés vörös színnel jelenik meg, ha bármelyik feltétel nem teljesül. Az elfogadhatósági feltételek beállítása a kódlefedettség tulajdonságok kiválasztásával, majd a jelzések és százalékok engedélyezésével történik. A megjelenített lefedettségi jelzések beállítása a kódlefedettségi beállítások kiválasztásával, majd a jelzések (metódus, blokk, stb.) engedélyezésével történik. A színt a Tulajdonságok oldalon beállított feltételek fogják eldönteni, nem a Beállítások oldalon megadottak.

K. Mely sorok nem számítanak bele a kódlefedettségbe?

V. Az alábbiak sem lefedettként, sem lefedetlenként vagy részlegesen lefedettként nem lesznek beleszámolva és a lefedettségi százalék kiszámításában sem vesznek részt:

K. Mit értünk blokkok alatt a blokk lefedettségben?

V. Végrehajtható egység kezdődik minden alapvető blokk elején, és minden olyan byte-kódnál, amelyek sorszáma az előző byte-kódtól eltérő. Az alapvető blokk olyan byte-kód utasításokból álló terület, amelyekbe vezető vagy abból kivezető ág nem létezhet. Amikor egy alapvető blokk első utasítása lefut, akkor az összes utasítás végrehajtásra kerül, így az utasítások egyetlen csoportnak tekinthetők.

Az alapvető blokkok olyan utasításokkal végződnek, mint például ág, hívás, dobás és visszatérés.

K. Miért van az, hogy kódlefedettségre felkészített alkalmazásokon végzett hibakereséskor a hibakereső a várt metódus helyett a llc_probe.class metódusba lép be?

V. Ennek oka az a mód, ahogyan a lefedettségi adatok összegyűjtésre kerülnek. Áthidaló megoldásként használjon lépésszűrőket: