You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by David Sag <ds...@epo.org> on 2005/11/17 16:08:45 UTC

[m2] where to put test data

I am writing the unit tests for a simple xml transformer and want to know 
2 things.

1) where is the maven2 approved place to put the test xml and xslt files? 
If I put them in src/test/resources then they end up in a jar file, and I 
am not sure how i refer to their path when i invoke File xml = new 
File("test.xm;");
  - so advice wanted please.

2) where is the best place to write test output that I then clean up?  in 
this case i want to write out the transformed file and check that it 
contains what I expect.  I am wtiting to target/temp - is that what you 
other maven2  users are doing?

Kind regards,
Dave Sag 




 

Re: [m2] where to put test data

Posted by David Sag <ds...@epo.org>.
Just a short note tho:

There is no system property called java.io.tmp.dir

it's called java.io.tmpdir

Kind regards,
Dave Sag 




 

David Sag <ds...@epo.org> wrote on 18-11-2005 11:08:17:

> 
> Thanks John those answers were perfectly satisfactory and i have 
> updated my code accordingly. 
> 
> a point to note however - the path to the resource should not start 
witha '/'
> 
> i have not looked but i wonder what the file path to a file within a
> jar looks like.  under maven the unit tests run before the jar is 
> made.  i shall explore this a bit more. 
> 
> and two - i went with the java.io.tmp.dir idea - seemed to me to be 
> the most useful.
> 
> Kind regards,
> Dave Sag 
> 
> 
> [image removed] 
> 
> 
> 
> John Casey <jd...@commonjava.org> wrote on 17-11-2005 16:52:13:
> 
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> > 
> > David Sag wrote:
> > |
> > | I am writing the unit tests for a simple xml transformer and want to
> > | know 2 things.
> > |
> > | 1) where is the maven2 approved place to put the test xml and xslt
> > | files?  If I put them in src/test/resources then they end up in a 
jar
> > | file, and I am not sure how i refer to their path when i invoke File 
xml
> > | = new File("test.xm;");
> > |   - so advice wanted please.
> > 
> > it may be a little hacky, but what I've used is:
> > 
> > ClassLoader loader = getClass().getClassLoader();
> > String resourceName = "/path/to/test.xslt";
> > URL resource = loader.getResource( resourceName );
> > 
> > File testFile;
> > if ( resource != null )
> > {
> > ~    testFile = new File( resource.getPath() );
> > }
> > else
> > {
> > ~    throw new SomethingException(..);
> > }
> > 
> > // use file.
> > 
> > This assumes that the test resources are somewhere in the classpath, 
not
> > necessarily in a jar. It works regardless of the ${user.dir} used, 
which
> > ~  makes it more resilient to IDE vs. Maven test invocation...
> > 
> > |
> > | 2) where is the best place to write test output that I then clean 
up?
> > |  in this case i want to write out the transformed file and check 
that it
> > | contains what I expect.  I am wtiting to target/temp - is that what 
you
> > | other maven2  users are doing?
> > 
> > You could pass in the directory via:
> > 
> > <build>
> > ~  ...
> > ~  <plugins>
> > ~    <plugin>
> > ~      <artifactId>maven-surefire-plugin</artifactId>
> > 
> > ~      <configuration>
> > ~        <systemProperties>
> > ~          <output>${project.build.directory}/temp</output>
> > ~        </systemProperties>
> > ~      </configuration>
> > ~    </plugin>
> > ~  </plugins>
> > </build>
> > 
> > This is usually going to be the same as using target/temp, but it will
> > track any changes in <build><directory/></build> within the POM. Of
> > course, that means you'll have to call:
> > 
> > System.setProperty( "output", "/path" );
> > 
> > when you want to run the test outside of Maven...Another possibility
> > would be to use a location within ${java.io.tmp.dir}...a 
temporaryfile/dir.
> > 
> > HTH,
> > 
> > John
> > 
> > |
> > | Kind regards,
> > | Dave Sag
> > |
> > |
> > |
> > |
> > |
> > -----BEGIN PGP SIGNATURE-----
> > Version: GnuPG v1.2.6 (GNU/Linux)
> > 
> > iD8DBQFDfKctK3h2CZwO/4URApFTAJsFhDlZaD5y1eO5UXWIfPkpQkRq+ACcCHcX
> > 5TlKSnWBjnCF7y/8J0f/Z/k=
> > =0ZHf
> > -----END PGP SIGNATURE-----
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > For additional commands, e-mail: users-help@maven.apache.org
> > 

Re: [m2] where to put test data

Posted by David Sag <ds...@epo.org>.
Thanks John those answers were perfectly satisfactory and i have updated 
my code accordingly.

a point to note however - the path to the resource should not start witha 
'/'

i have not looked but i wonder what the file path to a file within a jar 
looks like.  under maven the unit tests run before the jar is made.  i 
shall explore this a bit more.

and two - i went with the java.io.tmp.dir idea - seemed to me to be the 
most useful.

Kind regards,
Dave Sag 




 

John Casey <jd...@commonjava.org> wrote on 17-11-2005 16:52:13:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> David Sag wrote:
> |
> | I am writing the unit tests for a simple xml transformer and want to
> | know 2 things.
> |
> | 1) where is the maven2 approved place to put the test xml and xslt
> | files?  If I put them in src/test/resources then they end up in a jar
> | file, and I am not sure how i refer to their path when i invoke File 
xml
> | = new File("test.xm;");
> |   - so advice wanted please.
> 
> it may be a little hacky, but what I've used is:
> 
> ClassLoader loader = getClass().getClassLoader();
> String resourceName = "/path/to/test.xslt";
> URL resource = loader.getResource( resourceName );
> 
> File testFile;
> if ( resource != null )
> {
> ~    testFile = new File( resource.getPath() );
> }
> else
> {
> ~    throw new SomethingException(..);
> }
> 
> // use file.
> 
> This assumes that the test resources are somewhere in the classpath, not
> necessarily in a jar. It works regardless of the ${user.dir} used, which
> ~  makes it more resilient to IDE vs. Maven test invocation...
> 
> |
> | 2) where is the best place to write test output that I then clean up?
> |  in this case i want to write out the transformed file and check that 
it
> | contains what I expect.  I am wtiting to target/temp - is that what 
you
> | other maven2  users are doing?
> 
> You could pass in the directory via:
> 
> <build>
> ~  ...
> ~  <plugins>
> ~    <plugin>
> ~      <artifactId>maven-surefire-plugin</artifactId>
> 
> ~      <configuration>
> ~        <systemProperties>
> ~          <output>${project.build.directory}/temp</output>
> ~        </systemProperties>
> ~      </configuration>
> ~    </plugin>
> ~  </plugins>
> </build>
> 
> This is usually going to be the same as using target/temp, but it will
> track any changes in <build><directory/></build> within the POM. Of
> course, that means you'll have to call:
> 
> System.setProperty( "output", "/path" );
> 
> when you want to run the test outside of Maven...Another possibility
> would be to use a location within ${java.io.tmp.dir}...a temporary 
file/dir.
> 
> HTH,
> 
> John
> 
> |
> | Kind regards,
> | Dave Sag
> |
> |
> |
> |
> |
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.2.6 (GNU/Linux)
> 
> iD8DBQFDfKctK3h2CZwO/4URApFTAJsFhDlZaD5y1eO5UXWIfPkpQkRq+ACcCHcX
> 5TlKSnWBjnCF7y/8J0f/Z/k=
> =0ZHf
> -----END PGP SIGNATURE-----
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
> 

Re: [m2] where to put test data

Posted by John Casey <jd...@commonjava.org>.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

David Sag wrote:
|
| I am writing the unit tests for a simple xml transformer and want to
| know 2 things.
|
| 1) where is the maven2 approved place to put the test xml and xslt
| files?  If I put them in src/test/resources then they end up in a jar
| file, and I am not sure how i refer to their path when i invoke File xml
| = new File("test.xm;");
|   - so advice wanted please.

it may be a little hacky, but what I've used is:

ClassLoader loader = getClass().getClassLoader();
String resourceName = "/path/to/test.xslt";
URL resource = loader.getResource( resourceName );

File testFile;
if ( resource != null )
{
~    testFile = new File( resource.getPath() );
}
else
{
~    throw new SomethingException(..);
}

// use file.

This assumes that the test resources are somewhere in the classpath, not
necessarily in a jar. It works regardless of the ${user.dir} used, which
~  makes it more resilient to IDE vs. Maven test invocation...

|
| 2) where is the best place to write test output that I then clean up?
|  in this case i want to write out the transformed file and check that it
| contains what I expect.  I am wtiting to target/temp - is that what you
| other maven2  users are doing?

You could pass in the directory via:

<build>
~  ...
~  <plugins>
~    <plugin>
~      <artifactId>maven-surefire-plugin</artifactId>

~      <configuration>
~        <systemProperties>
~          <output>${project.build.directory}/temp</output>
~        </systemProperties>
~      </configuration>
~    </plugin>
~  </plugins>
</build>

This is usually going to be the same as using target/temp, but it will
track any changes in <build><directory/></build> within the POM. Of
course, that means you'll have to call:

System.setProperty( "output", "/path" );

when you want to run the test outside of Maven...Another possibility
would be to use a location within ${java.io.tmp.dir}...a temporary file/dir.

HTH,

John

|
| Kind regards,
| Dave Sag
|
|
|
|
|
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.6 (GNU/Linux)

iD8DBQFDfKctK3h2CZwO/4URApFTAJsFhDlZaD5y1eO5UXWIfPkpQkRq+ACcCHcX
5TlKSnWBjnCF7y/8J0f/Z/k=
=0ZHf
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org