unitaria tutorial test suma prueba ejemplos ejemplo configuracion con java unit-testing maven junit resourcebundle

java - tutorial - Archivos de recursos no encontrados en los casos de prueba JUnit



prueba unitaria con junit (3)

Resumen

Mis pruebas JUnit no están encontrando los archivos que requieren durante la ejecución. Estoy usando Maven para la administración y compilación de dependencias.

Detalles

Todos los archivos requeridos por los casos de prueba se encuentran en: src/test/resources .

Por ejemplo, src/test/resources/resourceFile.txt .

Para acceder a un recurso utilizo el siguiente código:

URL url = getClass().getResource("/resourceFile.txt").getFile(); File file = new File(url);

Pero luego file.exists() devuelve false . Y el error que obtengo es:

Tests in error: myJUnitTestCase(tests.MyJUnitTestClass): /home/me/workspace/Project%20Name/target/test-classes/resourceFile.txt (No such file or directory)

Tenga en cuenta que el siguiente da el mismo error (observe el eliminado / prefijo):

URL url = getClass().getClassLoader().getResource("resourceFile.txt").getFile(); File file = new File(url);

Parece que los archivos de src/test/resources no se copian en target/test-classes .

¿Algunas ideas?

Las siguientes preguntas no ayudaron

¿Por qué no puedo acceder a src / test / resources en la prueba de Junit con Maven?

Cargando archivo de propiedades en JUnit @BeforeClass

¿Cómo lidiar con los datos de prueba en Junit?

Versiones de software

Ubuntu 12.04

Apache Maven 2.2.1

Java 1.7.0

Eclipse (Java EE IDE para desarrolladores web) Indigo Service Release 2

(truncado) Maven POM

<?xml version="1.0" encoding="UTF-8"?> <project> <modelVersion>4.0.0</modelVersion> <groupId>com.groupId</groupId> <artifactId>artifactId</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>name</name> <build> <finalName>name</finalName> <directory>target</directory> <outputDirectory>target/classes</outputDirectory> <testOutputDirectory>target/test-classes</testOutputDirectory> <sourceDirectory>src/main/java</sourceDirectory> <testSourceDirectory>src/test/java</testSourceDirectory> <resources> <resource> <directory>src/main/resources</directory> </resource> </resources> <testResources> <testResource> <directory>src/test/resources</directory> </testResource> </testResources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> </dependencies> </project>


¿Sabes que Maven se basa en el paradigma de la Convención sobre la configuración ? por lo tanto, no debe configurar cosas que son las predeterminadas.

Todo eso representa el valor predeterminado en Maven. Entonces, la mejor práctica es no definirlo, ya está hecho.

<directory>target</directory> <outputDirectory>target/classes</outputDirectory> <testOutputDirectory>target/test-classes</testOutputDirectory> <sourceDirectory>src/main/java</sourceDirectory> <testSourceDirectory>src/test/java</testSourceDirectory> <resources> <resource> <directory>src/main/resources</directory> </resource> </resources> <testResources> <testResource> <directory>src/test/resources</directory> </testResource> </testResources>


Esto es realmente redundante, excepto en los casos en que desea anular los valores predeterminados. Todas estas configuraciones son valores predeterminados implícitos.

Puede verificar eso al verificar su POM efectivo usando este comando

mvn help:effective-pom

<finalName>name</finalName> <directory>target</directory> <outputDirectory>target/classes</outputDirectory> <testOutputDirectory>target/test-classes</testOutputDirectory> <sourceDirectory>src/main/java</sourceDirectory> <testSourceDirectory>src/test/java</testSourceDirectory> <resources> <resource> <directory>src/main/resources</directory> </resource> </resources> <testResources> <testResource> <directory>src/test/resources</directory> </testResource> </testResources>

Por ejemplo, si quiero apuntar a una ruta de recursos o ruta de recursos de prueba diferente, debe usar esto; de lo contrario, no.

<resources> <resource> <directory>/home/josh/desktop/app_resources</directory> </resource> </resources> <testResources> <testResource> <directory>/home/josh/desktop/test_resources</directory> </testResource> </testResources>


Mi error, los archivos de recursos FUERON copiados en target/test-classes . El problema parecía deberse a espacios en el nombre de mi proyecto , por ejemplo, Project%20Name .

Ahora estoy cargando el archivo de la siguiente manera y funciona:

org.apache.commons.io.FileUtils.toFile(myClass().getResource("resourceFile.txt")‌​);

O, (tomado de Java: ¿cómo obtener un archivo de una URL escapada? ) Esto puede ser mejor (sin dependencia de Apache Commons):

myClass().getResource("resourceFile.txt")‌​.toURI();