簡體   English   中英

如何在Junit中使用嵌入式Tomcat 7測試servlet 3.0注釋基礎servlet

[英]How to test servlet 3.0 annotations base servlet with an embbedded Tomcat 7 in Junit

我想寫一個JUnit測試來驗證一個tomcat 7的行為,這是關系到這個Servlet 3.0批注( @WebServlet@ServletSecurity )。

到目前為止我所做的是這個測試:

@Test
public void testDoGet()
     throws ServletException, LifecycleException, IOException {             
  Tomcat tomcat = new Tomcat();        
  tomcat.setPort(8080);        

  Context ctx = tomcat.addWebapp("/", 
     new File("target").getAbsolutePath());             
  Tomcat.addServlet(ctx, "hello", HelloServlet.class.getName());
  ctx.addServletMapping("/hello", "hello");     
  tomcat.start();

  ByteChunk chunk = new ByteChunk();        
  int responceCode = getUrl("http://127.0.0.1:8080/hello",chunk);

  System.out.println(responceCode + ": " + chunk.toString());

  tomcat.stop();
}

此測試有效,但它不會對注釋產生任何影響。

很明顯,此測試不會對HelloServlet的注釋產生任何影響。 但我不知道如何“注冊”servlet以便使用其基於注釋的配置。 任何人都可以給我一個提示如何構建一個測試嗎?

我並不完全熟悉Servlet 3.0注釋,但我的理解是你使用@WebServlet標記一個類並使用@GET@GET @POST等之一注釋一個方法,對嗎?

如果是這樣,那么我認為servlet類的單元測試不應涉及與上下文,URL路徑等相關的任何內容。如果您的測試正在測試此邏輯,那么您正在測試應用程序服務器的代碼和邏輯而不是您的自己的班級。

@WebServlet的單元測試中,我將堅持測試處理HTTP請求/響應的方法,並斷言給定某些輸入(在請求中)您的servlet返回預期的輸出(在響應中)。

我不知道是否能解決問題,但您可以將servlet版本顯式設置為3.0:

ctx.setEffectiveMajorVersion(3);
ctx.setEffectiveMinorVersion(0);

暫無
暫無

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

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