我寫一個JERSEY項目單元測試JERSEY控制器方法。如何測試與UriInfo
對於沒有查詢字符串的方法,我可以實例化控制器並調用方法。
路徑中的說法也工作,因爲他們顯示爲方法的字符串參數。
但是當我查詢字符串的模式有一個特殊的參數(@Context UriInfo url)
如何建立在我的單元測試的UriInfo說法? 爲什麼這個類沒有構造函數?
我寫一個JERSEY項目單元測試JERSEY控制器方法。如何測試與UriInfo
對於沒有查詢字符串的方法,我可以實例化控制器並調用方法。
路徑中的說法也工作,因爲他們顯示爲方法的字符串參數。
但是當我查詢字符串的模式有一個特殊的參數(@Context UriInfo url)
如何建立在我的單元測試的UriInfo說法? 爲什麼這個類沒有構造函數?
UriInfo
是一個接口,所以你不能直接創建它的對象。你需要繼承它並創建你自己的UriInfo
類。所以你的uriinfo類應該將String uri/url轉換爲UriInfo對象。
public class UriInformation implements UriInfo {
MultivaluedMap<String, String> pathParamMap;
MultivaluedMap<String, String> queryParamMap;
public UriInformation(UriInfo uriInfo) {
//parse uriInfo
}
//setters/getters
}
所以這樣你可以單元測試你的資源,而不用在tomcat/server中運行它。
如果你在測試中使用的Mockito,你可以模擬出UriInfo代替:
import java.net.URI;
import javax.ws.rs.core.UriInfo;
UriInfo mockUriInfo = mock(UriInfo.class);
when(mockUriInfo.getRequestUri()).thenReturn(new URI("http://www.test.com/go"));
你在這裏使用了哪個URI類? – k4sia 2015-04-20 14:39:34
我剛剛檢查並添加了上面的導入....這是在Java 7 .... – 2015-04-20 15:25:34
其高度不尋常的測試容器外的新澤西州的資源,和那種適得其反。不行的事情?集裝箱注入資源,路徑解釋,參數提取,子資源定位器......這個列表繼續。如果您真的想測試您的JAX-RS資源類,您應該從***客戶端***端進行測試。 – Perception 2013-03-09 13:02:36
我也可以在一個tomcat容器中運行一些測試,但是在運行代碼覆蓋率分析的調試單元測試方面。我完全失明,因爲它們分成兩個獨立的過程。 – 2013-03-09 14:23:30
如果您用您的應用程序獨立的Tomcat的部署,您可以運行的反對JUnit測試是使用客戶端庫來測試資源西裝。您可以使用Jersey客戶端庫甚至Apache HttpComponents來創建這些測試。 – Perception 2013-03-09 14:26:32