Kihagyás

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
  • 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.Time osztályt teszteljük
  • SUT kódja time/Time.java fileban
  • 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: .
Point p;
p = new Point();
p.x = 3;

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.