Ejemplo de staticField y staticInitializer

Este ejemplo muestra el uso del elemento de datos staticField y del fragmento de prueba StaticInitializer.

En este ejemplo, una prueba hace un seguimiento de cuándo se crean las instancias de una clase. Si una instancia se crea después de más de un segundo de la instancia anterior de dicha clase, la prueba escribe un mensaje de anotaciones.

Esta prueba hace lo siguiente:
  1. Utilizando el elemento de datos staticField, la prueba crea un campo estático de tipo Date en cada clase probada. El campo estático se inicializará llamando a new Date();.
  2. En el fragmento staticInitializer, la prueba establece la instancia Date de una clase probada en la "hora cero" (Enero de 1970) cuando se carga.
  3. En el fragmento entry (debido a las reglas de destino, el fragmento entry sólo se ejecuta en los constructores), la prueba comprueba cuándo se ha realizado la actualización anterior y emite un informe si la actualización se ha realizado hace más de un segundo.
  4. Finalmente, la prueba actualiza el valor de la instancia Date a "now" (ahora).

Esta prueba utiliza staticField para crear un nuevo campo estático en cada clase probada. Por comparación, la utilización de fragmentAtClassScope para declarar el campo Date daría como resultado una única instancia de Date que aparece en la clase generada que contiene los fragmentos de prueba, sea cual sea el número de clases a las que se aplica la prueba. Puede hacerlo si desea hacer un seguimiento del retardo entre la creación de instancias de cualquier clase probada, en lugar de hacer un seguimiento del retardo entre la creación de instancias de cada clase probada.

Para utilizar este ejemplo de código, cambie package="com.sample*" en el objeto destino para que haga referencia a un nombre de paquete real.

Tenga en cuenta que para utilizar los caracteres & y < en XML, debe especificar las entidades de tipo carácter &amp; y &lt;, como se muestra en el ejemplo.

<?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 + " instancia transcurrido > 1 segundo]");
         }
         lastInstanceDate.setTime(now);
       </code>
    </fragment>
    <fragment type="staticInitializer">
      <data name="lastInstanceDate" type="staticField"/>
      <data name="clname"/>
      <code>
         lastInstanceDate.setTime(0);
         System.out.println("[" + clname + " clase cargada]");
      </code>
    </fragment>
  </probe>
</probekit>

Tema padre: Ejemplos de Probekit

Consulta relacionada
El objeto de prueba StaticField
El fragmento de prueba staticInitializer

Copyright IBM Corporation y otras empresas 2000, 2004.