[英]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/resources
或src/test/resources
, src/main/webapp
下的文件不在classpath中,因為它們不應該。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.