3.előadás
Tesztelés
Unit test
- A program legkisebb, önálló részeinek tesztelése
- Egység
- Metódus
- Osztály
- Komponens/modul
- Nem egységes (külső függőségekkel)
- Fájlrendszer
- Adatbázis
- Hálózat
- Egység
- Kicsi, gyorsan lefutó, független tesztek
- Futási időben
- Néger @Dobozos
- CSak publ
- Funkcionális helyességet tesztel: a lefutás az elvárt eredményt adja-e
JUnit
A Java de-facto standard egységtesztelő programkönyvtára
Tesztelendő osztály: (SUT)
- Tegyük fel hogy a
time.Timeosztályt teszteljük - SUT kódja
time/Time.javafileban - Tesztelő kód a
time/TimeTest.java-ban
Fordítás: javac -cp junit5.jar time/TimeTest.java
-cp- Include class in the given `Class-path
Futtatás: java -jar junit5.jar -cp . -c time.TimeTest
-jar- Find the main method in the given.jar
Arrange-Act-Assert
package time;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test; // java moment
public class DemoTest {
@Test
void testHour00_00() {
// Step 1: Arrange
Time sut = new Time(0, 0);
// Step 2: Act
int hour = sut.getHour();
// Step 3: Assert
assertEquals(0, hour);
}
}
Típusok
Refencia
- Osztály típusú változó
- Objektumra hivatkozik
- Heap
- Létrehozás:
new - Dereferálás:
.
Primitív típusok
- byte: [−128..127]
- short: [\(−2^{15}\)..\(2^{15} − 1\)]
- int: [\(−2^{31}\)..\(2^{31} − 1\)]
- long: 8 bájt
- float: 4 bájt
- double: 8 bájt
- char: 2 bájt
- boolean: {false,true}
Heap és stack
- Végrehajtási verem
- Lokális változók és paraméterek
- (Primitív típusú, referencia)
- Heap
- Objektumok, mezőik
- (Primitív típusú, referencia)
Lokális változók hatásköre és élettartama
- Más nyelvekhez (pl. C) hasonló szabályok
- Lokáis változó élettartama: hazókör végéig
- Hatókör: deklarációtól a közvetlenül tartalmazó blokk végéig
- Elfedés: csak mezőt, lokális változót nem lehet
Lokális változók inicializálása
- Nincs automatikus inicializáció
- Explicit értékadás kell olvasás előtt
- Fordítási hiba
public static void main( String[] args ){
int i;
Point p;
p.x = i; // duplán fordítási hiba (double sussy wussy)
}
Szemétgyűjtés
Garbage Collection - GC
Felszabadítja a feleslegessé vált objektumokat
- Helyes
- Csak olyat szabadít fel, amit már nem lehet elérni a programból
- Teljes
- Mindent felszabadít, amit nem lehet már elérni
public static void main(String[] args) // woooooooo
{
Hero clint = new Hero();
Hero natasha = new Hero();
clint.name = "Barton";
natasha.name = "Romanova";
clint.bestFriend = natasha;
natasha.bestFriend = clint;
}
GC felépítése
- Mark fázis
- Kiindulunk a vermen lévő referenciákból
- Megjelöljük a belőlük elérhető objektumokat
- Sweep fázis
- jelöletlen objektumok felszabadíthatóak
Statikus mezők
- hasonló a C globális változóihoz
- Csak egy létezik belőle
- Az osztályon keresztül érhető el
class Item{
static int counter = 0;
}
class Main{
public static void main(String[] args){
System.out.println(Item.counter);
}
}
Statikus metódusban nincs this.