Beispiel für einen staticField- und staticInitializer-Test

Dieses Beispiel veranschaulicht, wie das Datenelement 'staticField' und das Testfragment 'staticInitializer' eingesetzt werden.

In diesem Beispiel verfolgt der Test, wann Exemplare einer Klasse erstellt werden. Wenn eine Instanz mehr als eine Sekunde nach der vorherigen Instanz dieser Klasse erstellt wird, schreibt der Test eine Protokollnachricht.

Im Folgenden wird die Funktionsweise des Tests beschrieben:
  1. Die statische Felddefinition wird verwendet, um in jeder getesteten Klasse ein statisches Feld vom Typ Date zu erstellen. Das statische Feld wird initialisiert, indem new Date(); aufgerufen wird.
  2. Im Fragment staticInitializer setzt der Test das Datumsexemplar einer getesteten Klasse auf "time zero" (Januar 1970) sobald es geladen wird.
  3. Im Fragment entry überprüft der Test, ob die vorherige Aktualisierung durchgeführt wurde und erstellt einen Bericht, wenn die Aktualisierung vor mehr als einer Sekunde durchgeführt wurde. (Aufgrund der Zielregeln lässt sich das Fragment entry nur in Konstruktoren ausführen.)
  4. Schließlich aktualisiert der Test den Wert des Datumsexemplars auf "jetzt".

Dieser Test verwendet die statische Felddefinition, um in jeder getesteten Klasse ein neues statisches Feld zu erstellen. Im Vergleich hierzu würde die Verwendung eines Fragments im Klassenbereich bei der Angabe des Datumsfeldes dazu führen, dass nur ein einziges Exemplar des Datums in der generierten Klasse mit den Testfragmenten erscheint, ganz egal auf wieviele Klassen der Test angewendet wird. Sie können dies tun, wenn Sie die Zeitverzögerung zwischen der Erstellung von Instanzen einer getesteten Klasse protokollieren möchten, und nicht die Verzögerung zwischen der Erstellung der Instanzen aller getesteten Klassen.

Der Test wird durch die folgenden Einträge im Probekit-Editor definiert:
  • Vollständig qualifizierter Java-Typ für Feld 'static' (klicken Sie mit der rechten Maustaste auf 'Test' im Baumstrukturteilfenster, und klicken Sie daraufhin auf 'Neu' > 'Statisches Feld', um diesen Wert einzugeben):

    java.util.Date

  • Ziel (um diese Werte einzugeben, wählen Sie 'Ziel' im Baumstrukturteilfenster, und klicken Sie auf 'Bearbeiten'):
    • Zieltyp: include
    • Paket: com.sample* (Verwenden Sie hier einen echten Paketnamen.)
    • Klasse: *
    • Methode: <init>
    • Methodensignatur: *
  • Ziel (um diese Werte einzugeben, klicken Sie auf 'Hinzufügen', und dann im Bearbeitungsfenster auf 'Bearbeiten':
    • Zieltyp: exclude
    • Paket: *
    • Klasse: *
    • Methode: *
    • Methodensignatur: *
  • Fragment (wählen Sie 'Fragment' im Baumstrukturteilfenster aus, um die folgenden Werte einzugeben):
    • Fragmenttyp: entry
    • Datenelemente:
      • Datentyp: staticField, Name: lastInstanceDate
      • Datentyp: className, Name: clname
    • Java-Code:

      java.util.Date d = new java.util.Date();
      long now = d.getTime();
      long prev = lastInstanceDate.getTime();
      if (prev != 0 && prev + 1000 < now) {
        System.out.println("[" + clname + " instance after > 1 second]");
      }
      lastInstanceDate.setTime(now);

    • Fragment (klicken Sie mit der rechten Maustaste auf 'Test', und wählen Sie 'Neu' > 'Fragment', um die folgenden Werte einzugeben:
      • Fragmenttyp: staticInitializer
      • Datenelemente:
        • Datentyp: staticField, Name: lastInstanceDate
        • Datentyp: className, Name: clname
      • Java-Code:

                 lastInstanceDate.setTime(0);
                 System.out.println("[" + clname + " class loaded]");