3 votes

Comment configurer pom pour StrutsTestCase afin que web.xml soit trouvé ?

J'utilise Maven 2 pour construire un projet Java - Sturts 1.2 - Spring 1.2. J'essaie d'intégrer l'extension StrutsTestCase de JUnit pour permettre de tester les classes d'action.

Lorsque j'essaie de construire, j'obtiens l'erreur suivante :

junit.framework.AssertionFailedError: The /WEB-INF/web.xml was not found.
  at servletunit.struts.MockStrutsTestCase.getActionServlet(MockStrutsTestCase.java:344)
  at servletunit.struts.MockStrutsTestCase.tearDown(MockStrutsTestCase.java:130)

En faisant des recherches à ce sujet, j'ai appris ce qui suit :

  1. Si votre web.xml se trouve dans un emplacement non standard, alors le fichier setServletConfigFile() peut être utilisé pour indiquer à StrutsTestCase où se trouve le fichier.
  2. Lors de la construction avec Maven, il peut être nécessaire d'indiquer quelles ressources doivent être incluses dans le fichier pom.xml .

Je suis en train d'essayer de mettre en œuvre ce système, voici mes progrès actuels :

Classe de test :

import servletunit.struts.MockStrutsTestCase;

public class FooActionTest extends MockStrutsTestCase {

  public void setUp() throws Exception {
  super.setUp();
  setServletConfigFile("webapp/WEB-INF/web.xml");
}

public void testTest() throws Exception { /* stub, no content */ }

J'ai inclus les éléments suivants testResources en el build dans le pom.xml .

<testResources>
  <testResource>
    <directory>src/test/java</directory>
    <includes>
      <include>*.*</include>
    </includes>
  </testResource>
  <testResource>
    <directory>webapp/WEB-INF</directory>
    <includes>
      <include>*.xml</include>
    </includes>
  </testResource>
</testResources>

Voici la structure du projet :

myproject
---src
   |---main
|   |   |---java
|   |
|   |---test
|       |---Java
|
|---target
|   |---classes
|   |
|   |---MYPROJECT
|       |---META-INF
|       |---WEB-INF
|           |---struts.config.xml
|           |---web.xml
|
|---webapp
|   |---META-INF
|   |---WEB-INF
|       |---struts.config.xml
|       |---web.xml
|---pom.xml

Bien sûr, j'ai essayé une variété de variations des chemins en pom.xml et en setServletConfigFile . J'ai également essayé d'utiliser setContextDirectory sans résultat différent.

1voto

STB Land Points 866

J'utilise la structure par défaut de Maven webapp.

myproject
|---src
|   |---main
|   |   |---java
|   |
|   |---test
|   |    |---Java
|   |
|   |---webapp
|        |---WEB-INF
|             |---struts.config.xml
|             |---web.xml
|
|---pom.xml

J'ajoute des fichiers XML de la webapp à mes ressources de test et je il n'est pas nécessaire d'appeler la méthode setServletConfigFile .

<project>
...
<build>
...
<testResources>
    <testResource>
        <directory>src/main/webapp/WEB-INF</directory>
        <targetPath>/WEB-INF</targetPath>
        <includes>
            <include>*.xml</include>
        </includes>
    </testResource>
</testResources>
..
</build>
...
</project>

Donc, dans votre cas, vous devez ajouter ces lignes dans votre fichier POM :

<project>
...
<build>
...
<testResources>
    <testResource>
        <directory>webapp/WEB-INF</directory>
        <targetPath>/WEB-INF</targetPath>
        <includes>
            <include>*.xml</include>
        </includes>
    </testResource>
</testResources>
..
</build>
...
</project>

0voto

Alexander Pogrebnyak Points 24964

Je pense que le moyen le plus simple de le faire est d'utiliser une propriété qui contient un chemin d'accès à web.xml .

De cette façon, vous pouvez simplement passer la valeur de la propriété au plugin surefire

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
      <systemPropertyVariables>
        <test.web-xml.file>${project.build.directory}/MYPROJECT/WEB-INF/web.xml</test.web-xml.file>
      </systemPropertyVariables>
    </configuration>
  </plugin>

Ensuite, dans votre méthode d'installation, obtenez une propriété du système :

  public void setUp() throws Exception {
    super.setUp();
    // You may want to do some validation if this property is set and
    // points to a file
    setServletConfigFile( System.getProperty("test.web-xml.file") );
  }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X