簡體   English   中英

如何使用 Junit 在 servlet 中測試業務邏輯?

[英]How do I test business logic in a servlet using Junit?

我有一個 servlet,它在調用 DAO 方法之前進行一些前置條件檢查,如下所示:

private void processRequest(HttpServletRequest request, HttpServletResponse response){
        if(a condition is met)
            myDAOFunction();
        else
            redirect();
}

我應該如何構建我的單元測試來驗證是否有某個請求, servlet調用我的 function,以及其他不滿足條件的請求是否會重定向頁面?

我已經嘗試過這個解決方案:由於我的DAO function會在數據庫中進行一些更改,如果它被調用,我可以測試 servlet 是否正確處理請求和響應。 但我認為這不是一個優雅的解決方案。

所以你需要驗證servlet是否可以正確地與DAO相關代碼交互。 If your design already separate and encapsulate all the codes related to interacting with DB in a DAO service class, you can easily test it by mocking this DAO service class using Mockito and then verify if the expected methods on the mock DAO service are invoked with the預期參數。 如果沒有,請重構您的代碼,使其具有此單獨的 DAO 服務 class。

對於 mocking MockHttpServletRequestMockHttpServletResponsespring-test已經提供了一些實用程序來創建它們,這些實用程序對於測試Servlet內容很有用。 雖然它們主要設計用於與 spring-mvc 編寫的代碼一起使用,但它也應該用於不是 spring 編寫的代碼,並且與 Z4D1142CA816EAC3E373B383BC0B7 相比應該更方便使用。

假設您的 servlet 稱為FooBarServlet ,測試用例可能如下所示:

@ExtendWith(MockitoExtension.class)
public class FooBarServletTest { 

        @Mock
        DaoService daoService;

        @Test
        void testSaveToDatabase(){
                    
            FooBarServlet sut = new FooBarServlet(daoService);

            MockHttpServletRequest request = MockMvcRequestBuilders.get("/foobar")
                ......   
                .buildRequest(new MockServletContext());
            MockHttpServletResponse response = new MockHttpServletResponse();

            sut.processRequest(request, response);
            verify(daoService).save("xxxxxx");

        }

        @Test
        void testRedirect(){
                    
            FooBarServlet sut = new FooBarServlet(daoService);

            MockHttpServletRequest request = MockMvcRequestBuilders.get("/foobar")
                ......   
                .buildRequest(new MockServletContext());
            MockHttpServletResponse response = new MockHttpServletResponse();

            sut.processRequest(request, response);
            verify(daoService,never()).save(any());
        }

}

暫無
暫無

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

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