Как настроить pom для StrutsTestCase, чтобы найти файл web.xml? - PullRequest
3 голосов
/ 16 августа 2011

Я использую Maven 2 для создания проекта Java - Sturts 1.2 - Spring 1.2. Я пытаюсь включить расширение JUnit для StrutsTestCase, чтобы разрешить тестирование классов действий.

Когда я пытаюсь собрать, я получаю следующую ошибку:

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)

Исследуя это, я узнал следующее:

  1. Если ваш web.xml файл находится в нестандартном расположении, тогда setServletConfigFile() может использоваться для указания StrutsTestCase, где находится файл.
  2. При сборке с Maven может потребоваться указать, какие ресурсы следует включить в pom.xml.

Я пытаюсь реализовать это, вот мой текущий прогресс:

Тестовый класс:

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 */ }

Я включил следующие testResources в тег build в 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>

Вот структура проекта:

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

Конечно, я пробовал различные варианты путей в pom.xml и setServletConfigFile. Я также пытался использовать setContextDirectory, без каких-либо других результатов.

Ответы [ 2 ]

1 голос
/ 25 июня 2012

Я использую стандартную структуру веб-приложения Maven

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

Я добавляю XML-файлы веб-приложения в свои тестовые ресурсы, и мне не нужно вызывать метод 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>

Итак, в вашем случае вы должны добавить эти строки в свой файл POM:

<project>
...
<build>
...
<testResources>
    <testResource>
        <directory>webapp/WEB-INF</directory>
        <targetPath>/WEB-INF</targetPath>
        <includes>
            <include>*.xml</include>
        </includes>
    </testResource>
</testResources>
..
</build>
...
</project>
0 голосов
/ 16 августа 2011

Я думаю, что самый простой способ сделать это через свойство, которое содержит путь к web.xml.

Таким образом, вы можете просто передать значение свойства в плагин 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>

Тогда в вашем методе установки просто получите системное свойство:

  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") );
  }
...