Beispiel für 'staticField' und 'staticInitializer'

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

In diesem Beispiel verfolgt ein Test, wann Exemplare einer Klasse erstellt werden. Wenn ein Exemplar später als eine Sekunde nach dem vorherigen Exemplar dieser Klasse erstellt wird, schreibt der Test eine Protokollnachricht.

Der Test verfährt folgendermaßen:
  1. Das Datenelement staticField 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 (aufgrund der Zielregeln lässt sich das Fragment entry nur in Konstruktoren ausführen) ü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.
  4. Schließlich aktualisiert der Test den Wert des Datumsexemplars auf "jetzt".

Dieser Test verwendet staticField, um in jeder getesteten Klasse ein neues statisches Feld zu erstellen. Im Vergleich hierzu würde die Verwendung von 'fragmentAtClassScope' 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 beliebigen getesteten Klasse verfolgen wollen, anstatt die Verzögerung zwischen der Erstellung von Instanzen jeder getesteten Klasse zu verfolgen.

Um diesen Mustercode zu verwenden, ändern Sie package="com.sample*" im Zielobjekt, so das es sich auf den tatsächlichen Paketnamen bezieht.

Beachten Sie, dass Sie zur Verwendung der Zeichen & und < in XML die Zeicheneinheiten &amp; und &lt; wie im Beispiel dargestellt angeben müssen.

<?xml version="1.0" encoding="ASCII"?>
<probekit>
  <probe>
    <target type="include" package="com.sample*" method="&lt;init>" />
    <target type="exclude" package="*" />
    <staticField type="java.util.Date"/>
    <fragment type="entry">
      <data name="lastInstanceDate" type="staticField"/>
      <data name="clname"/>
      <code>
         java.util.Date d = new java.util.Date();
         long now = d.getTime();
         long prev = lastInstanceDate.getTime();
         if (prev != 0 &amp;&amp; prev + 1000 &lt; now) {
           System.out.println("[" + clname + " instance after > 1 second]");
         }
         lastInstanceDate.setTime(now);
       </code>
    </fragment>
    <fragment type="staticInitializer">
      <data name="lastInstanceDate" type="staticField"/>
      <data name="clname"/>
      <code>
         lastInstanceDate.setTime(0);
         System.out.println("[" + clname + " class loaded]");
      </code>
    </fragment>
  </probe>
</probekit>

Übergeordnetes Thema: Probekit-Beispiele

Verwandte Verweise
Das Testobjekt StaticField
Das Testfragment 'staticInitializer'

Copyright IBM Deutschland GmbH und andere 2000, 2004.