簡體   English   中英

Maven中的單元測試需要訪問src / main / webapp目錄

[英]Unit Test in Maven requires access to the src/main/webapp Directory

我正在嘗試對我在Maven / Eclipse中開發的webapp進行單元測試。 它是一個Spring MVC webapp,我需要一些單元測試來測試我的模型控制器。

為此,我需要使用我的webapp配置.xml文件來注入控制器,但是,我的所有配置(以及配置引用的其他相關文件)都在src / main / webapp目錄中(根據Maven慣例) - 這里有很多文件我需要在我的測試中引用,但是在運行測試時它們不可用,因為它們不在類路徑上(Maven似乎只是添加了src / main / java,src / test / java,src / main / resources,src / test /資源到類路徑但不是src / main / webapps)

我不想將我的整個webapp復制到我的src / test / resources文件夾中只是為了測試 - 有沒有其他方法可以訪問它們?

我可以通過更改Eclipse“運行配置”以在類路徑中包含此文件夾來解決這個問題,但是從命令行運行測試時這不起作用?

有人遇到過這種情況么? 有沒有明智的解決方案?

謝謝!

通常,您應該使用模擬(例如,EasyMock或jMock)來處理控制器的單元測試; 單元測試應該與系統的其余部分隔離地測試組件。 在Spring 3中,您可以將控制器定義為帶有注釋的POJO,然后只需測試控制器而無需Spring的任何交互。

如果您希望進行更多的集成級測試,那么您可以將配置文件的公共部分放在src / main / resources中,以便它們可以在類路徑中訪問。 然后在src / test / resources中使用測試特定配置進行測試。 該文件可以將這些文件與您需要的任何內容一起導入,也可以使用@ContextConfiguration注釋您的測試用例,以指定組裝上下文所需的多個文件。

有關具體示例,請參閱有關集成測試Spring MVC的博客文章 Spring手冊測試章節對Spring中的集成測試也有一個很好的概述。

您可以使用maven-surefire-plugin實現此目的,如下所示:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
            <additionalClasspathElements>
                <additionalClasspathElement>src\main\webapp\</additionalClasspathElement>
            </additionalClasspathElements>
        </configuration>
    </plugin>

現在您可以通過這種方式訪問​​web.xml,例如:

getClass().getClassLoader().getResourceAsStream("classpath:webapp/WEB-INF/web.xml")

Emil的第一個鏈接在顯示正確的@ContextConfiguration位置時是正確的。

如果你的Spring配置文件在src / main / webapp / **中,那么當它們由Maven構建時它們不會在類路徑上。 要獲得集成測試的配置,請使用file: prefix指定路徑。

@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/app-config.xml")

如果使用Spring的STS插件創建一個新的Spring MVC項目,您會注意到應用程序上下文配置文件放在我的示例的位置。 然后,在集成測試中使用它們的方法是使用file:前綴來指定路徑,如上所述。

為此,我需要使用我的webapp配置.xml文件來注入控制器,但是,我的所有配置(以及配置引用的其他相關文件)都在src / main / webapp目錄中

在單元測試期間您還需要哪些文件?

我不想將我的整個webapp復制到我的src / test / resources文件夾中只是為了測試 - 有沒有其他方法可以訪問它們?

不。如果你想讓它們在類路徑上,把它們放在src/main/resourcessrc/test/resourcessrc/main/webapp下的文件不在classpath中,因為它們不應該。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM