I have a maven mantained project with some modules . One module contains one
XML file and one parsing class :Parser.java.

Second module depends on the first module. There is a class that extends the
parsing class in the first module , but maven seems cannot test the class in
the second module. Maven test reports :

java.lang.NullPointerException

 at java.util.Properties.loadFromXML(Properties.java:851)

 at foo.firstModule.Parser.<init>(Parser.java:92)

 at foo.secondModule.Program.<init>(Program.java:84)

In "Parser.java" (in the first module) , it uses Properties and InputStream
to read/parse an XML file :

InputStream xmlStream = getClass().getResourceAsStream("Data.xml");
Properties properties = new Properties();

properties.loadFromXML(xmlStream);

The "data.xml" is located in first module's resources/foo/firstModule
directory , and it tests OK in the first module.

Here is my full code :

This is Parser in the first module :

package foo.firstModule;

import java.io.IOException;
import java.io.InputStream;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;

public class Parser
{

  private Properties properties;

  public Parser()

  {

    InputStream xmlStream = getClass().getResourceAsStream("Data.xml");

    properties = new Properties();

    try

    {

      properties.loadFromXML(xmlStream);

    }

    catch (InvalidPropertiesFormatException e)

    {

      e.printStackTrace();

    }

    catch (IOException e)

    {

      e.printStackTrace();

    }

  }

  public Properties getProperties()

  {

    return properties;

  }
}

This is Parser's test case , passed .

package foo.firstModule;

import junit.framework.TestCase;

public class ParserTest extends TestCase
{

  public void testParser()

  {

    Parser p = new Parser();

    assertEquals(64 , p.getProperties().size());

  }
}

This is ParserExtend in the secondModule , which extends Parser in the
firstModule :

package foo.secondModule;

import java.util.Properties;

import foo.firstModule.Parser;

public class ParserExtend extends Parser
{

  private Properties properties;

  public ParserExtend()

  {

    this.properties = getProperties();

  }

  public int getSize()

  {

    return properties.size();

  }
}

This is ParserExtend's test case :

package foo.secondModule;

import junit.framework.TestCase;

public class ParserExtendTest extends TestCase
{

  public void testParserExtend()

  {

    ParserExtend pe = new ParserExtend();

    assertEquals(64 , pe.getSize());

  }
}

The above test case failed because
*Properties.loadFromXML*(Properties.java:851)
throws NPE

However , if I don't extend Parser , just new the Parser :

package foo.secondModule;

import java.util.Properties;

import foo.firstModule.Parser;

public class ParserInit
{

  private Properties properties;

  public ParserInit()

  {

    Parser p = new Parser();

    this.properties = p.getProperties();

  }

  public int getSize()

  {

    return properties.size();

  }
}

and this is the test case :

package foo.secondModule;

import junit.framework.TestCase;

public class ParserInitTest extends TestCase
{

  public void testParserInit()

  {

    ParserInit pi = new ParserInit();

    assertEquals(64 , pi.getSize());

  }
}

The test case passes !

This is my whole test scenario. It seems it 's maven and junit's classloader
problem.

Anybody able to find how to pass the ParserExtend's test case ? Thanks in
advanced.

Reply via email to