ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kai Bartels <>
Subject Ant,Java,JUnit and class initialization ?
Date Wed, 11 Apr 2001 10:32:11 GMT
Hi there!

I got another problem in trying to create tests for my application with junit
and ant; this one is kinda weird, I think.
The application is a database-based server that has to be started in order to
be tested properly. So I have two targets that are executed one after the
other. The first uses a java-task to start the server in ant's VM
(fork="false"). The second is the junit-task (also fork="false") that tests
some server output.

The "first" class of the server ("Supervisor") now has a public static field
describing it's sole instance, so I have a starting point from which to wander
off into the server. But when I try to access this field from my test class the
class Supervisor is initialized a second time and the fields value is (of
course) (reset to) null; I can't find the server. I tried direct access to the
static fild (Supervisor.lastInstance) and introspection - no difference.

I'm quite positive that ant doesn't start a second VM for either the server or
junit. Does anyone have an idea why I cannot access my loaded and initialized
server class from the test class?

Here are some excerpts from the build.xml, the server class, the test class and
ant's output.
(Note: TestBGStarter just wraps the Supervisor)
  <target name="test-start-server" depends="compile">
    <echo message="starting server"/>
    <delete file="test.server.log"/>
    <java classname="xxx.supervisor.TestBGStarter"
      <arg line="-config test.server.config"/>
    <echo message="waiting for server to come up"/>
    <exec executable="">
      <arg line="test.server.log"/>
    <echo message="server running"/>

  <target name="test-do" depends="compile">
    <junit printsummary="true"
        <pathelement location="${oracle.home}/jdbc/lib/"/>
        <pathelement path="${build.classpath}"/>
        <pathelement location="${compile.dir}"/>
      <formatter type="plain"
      <test name="xxx.command_post.ASInfoTester"
  private Supervisor( ConfigFile conf )
    config = conf;
    System.err.print( "Supervisor::init: lastInstance from "+lastInstance );
    lastInstance = this;
    System.err.println( " to "+lastInstance );

  public static Supervisor lastInstance;

static { System.err.println( "INIT OF CLASS Supervisor" ); }
  public void setUp()
    Class sup_class;
    Field sup_self_field;
    Supervision server;
    CommandsSupervisor cs;

    // get ref to server Supervisor
//       sup_class = Class.forName( "xxx.supervisor.Supervisor", false, this.getClass().getClassLoader()
//       sup_self_field = sup_class.getField( "lastInstance" );
// System.err.println("found field: "+sup_self_field.getName()+" mod: "+sup_self_field.getModifiers()+"
class: "+sup_self_field.getDeclaringClass().getName()+" type: "+sup_self_field.getType().getName()+"
acc: "+sup_self_field.isAccessible() );
//       server = (Supervision)sup_self_field.get( null );  // static field;
System.err.println("looking for Supervisor");
      server = Supervisor.lastInstance;
System.err.println("found supervisor: "+server);
    catch( Exception e ) { e.printStackTrace(); }
Ant version 1.3 compiled on March 2 2001

Buildfile: build.xml
Detected Java Version: 1.3
Detected OS: Linux


     [echo] starting server
   [delete] Deleting: /xxx/test.server.log
     [java] Running in same VM xxx.supervisor.TestBGStarter -config test.server.config
INIT OF CLASS Supervisor
     [echo] waiting for server to come up
     [exec] Myos = Linux
     [exec] test.server.log
Supervisor::init: lastInstance from null to xxx.supervisor.Supervisor@f73c1
     [echo] server running

    [junit] Using System properties {}
    [junit] Using CLASSPATH [...]
    [junit] Running xxx.command_post.ASInfoTester
looking for Supervisor
INIT OF CLASS Supervisor
found supervisor: null

greetinx, Kai
"Leave it to the businessmen .... to die young."                   <Fisher-Z>                  +       
picturesafe GmbH, Lueerstr. 3, D-30175 Hannover          fon:+49 511 85620 56
++ PGP Key fingerprint =  D2 B9 58 DC 36 52 DB 6C  18 CC 43 9F 68 E0 21 97 ++

View raw message