Existen diferencias y restricciones en las opciones ofrecidas por @Steve C y @ ashosborne1. Deben especificarse, creo.
¿Cuándo podemos usar File resourcesDirectory = new File("src/test/resources");
:?
- 1 Cuando las pruebas se ejecutarán solo a través de Maven pero no a través de IDE.
- 2.1 Cuando las pruebas se ejecutarán a través de Maven o
- 2.2 a través de IDE y solo se importa un proyecto a IDE. (Uso el término "importado", porque se usa en IntelliJ IDEA. Creo que los usuarios de eclipse también importan su proyecto maven). Esto funcionará, porque el directorio de trabajo cuando ejecuta pruebas a través de IDE es el mismo que su proyecto.
- 3.1 Cuando las pruebas se ejecutarán a través de Maven o
- 3.2 a través de IDE, y se importan más de un proyecto a IDE (cuando no es estudiante, generalmente importa varios proyectos), y antes de ejecutar pruebas a través de IDE, configura manualmente el directorio de trabajo para sus pruebas. Ese directorio de trabajo debe referirse a su proyecto importado que contiene las pruebas. Por defecto, el directorio de trabajo de todos los proyectos importados en IDE es solo uno. Probablemente solo sea una restricción
IntelliJ IDEA
, pero creo que todos los IDE funcionan así. Y esta configuración que debe hacerse manualmente, no es buena en absoluto. Trabajando con varias pruebas existentes en diferentes proyectos de Maven, pero importados en un gran proyecto "IDE", nos obligan a recordar esto y no permitimos relajarnos y disfrutar de su trabajo.
La solución ofrecida por @ ashosborne1 (personalmente prefiero esta) requiere 2 requisitos adicionales que deben realizarse antes de ejecutar las pruebas. Aquí hay una lista de pasos para usar esta solución:
Cree una carpeta de prueba ("teva") y un archivo ("readme") dentro de "src / test / resources /":
src / test / resources / teva / readme
El archivo debe crearse en la carpeta de prueba, de lo contrario, no funcionará. Maven ignora las carpetas vacías.
Al menos una vez construir el proyecto a través de mvn clean install
. También ejecutará pruebas. Puede ser suficiente ejecutar solo su clase / método de prueba a través de Maven sin construir un proyecto completo. Como resultado, sus recursos de prueba se copiarán en clases de prueba, aquí hay una ruta:target/test-classes/teva/readme
Después de eso, puede acceder a la carpeta usando el código, ya ofrecido por @ ashosborne1 (lo siento, no pude editar este código dentro de esta lista de elementos correctamente):
public static final String TEVA_FOLDER = "teva"; ...
URL tevaUrl = YourTest.class.getClassLoader().getResource(TEVA_FOLDER);
String tevaTestFolder = new File(tevaUrl.toURI()).getAbsolutePath();
Ahora puede ejecutar su prueba a través de IDE tantas veces como lo desee. Hasta que corras mvn limpio. Caerá la carpeta de destino.
Los pasos necesarios para crear un archivo dentro de una carpeta de prueba y ejecutar maven por primera vez, antes de ejecutar las pruebas a través de IDE. Sin estos pasos, si solo en su IDE crea recursos de prueba, luego escribe la prueba y la ejecuta solo a través de IDE, obtendrá un error. La ejecución de pruebas a través de mvn copia los recursos de prueba en target / test-classes / teva / readme y se vuelven accesibles para un cargador de clases.
Puede preguntar, ¿por qué necesito importar más de un proyecto Maven en IDE y por qué tantas cosas complicadas? Para mí, una de las principales motivaciones: mantener los archivos relacionados con IDA lejos del código. Primero creo un nuevo proyecto en mi IDE. Es un proyecto falso, que es solo un titular de archivos relacionados con IDE. Luego, importo proyectos maven ya existentes. Obligo a estos proyectos importados a mantener archivos IDEA solo en mi proyecto falso original. Como resultado, no veo archivos relacionados con IDE entre el código. SVN no debería verlos (no ofrezca configurar svn / git para ignorar dichos archivos, por favor). También es muy conveniente.