我正在嘗試測驗我的 servlet 以查看它是否DAOService使用會話中傳遞的一些引數呼叫我的但遇到了這個問題
日志:
org.mockito.exceptions.misusing.MissingMethodInvocationException:
when() requires an argument which has to be 'a method call on a mock'.
For example:
when(mock.getArticles()).thenReturn(articles);
at Servlet.SupplierServletTest.supplierServlet_StandardTest(SupplierServletTest.java:32)
代碼
SupplierServlet supplierServlet = new SupplierServlet();
MockHttpServletRequest request = new MockMvcRequestBuilders.get("/SupplierServlet").buildRequest(new MockServletContext());
MockHttpServletResponse response = new MockHttpServletResponse();
MockHttpSession session = new MockHttpSession();
when(request.getSession()).thenReturn(session); //This is the line 32 that the log mentioned, I deleted the session part and the problem was the same for the following lines
when(request.getParameter("Name")).thenReturn("test");
when(request.getParameter("Address")).thenReturn("test");
when(request.getParameter("Phone")).thenReturn("1234");
supplierServlet.processRequest(request, response);
supplierDAO = mock(SupplierDAO.class);
verify(supplierDAO).newSupplier(new Supplier("test", "test", "1234"));
任何提示表示贊賞
uj5u.com熱心網友回復:
至于初始化MockHttpServletRequest,您應該使用 Spring 提供的構建器。由于它是 Spring 框架提供的類(并且不是 Mockito 模擬),因此使用 Mockito 模擬其方法會導致錯誤。
MockHttpServletResponse response = new MockHttpServletResponse();
MockHttpSession session = new MockHttpSession();
MockHttpServletRequest request = MockMvcRequestBuilders.get("/SupplierServlet")
.session(session)
.param("Name", "test")
.param("Address", "test")
.param("Phone", "1234")
.buildRequest(new MockServletContext());
supplierServlet.processRequest(request, response);
supplierDAO = mock(SupplierDAO.class);
verify(supplierDAO).newSupplier(new Supplier("test", "test", "1234"));
此外,你的supplierDAO模擬是無用的。在模擬一個物件之后,您需要將它注入到被測代碼中。它通常通過將模擬作為函式引數傳遞來完成。而在您的測驗中,您正在嘗試驗證從未使用過的模擬上的呼叫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/387530.html
上一篇:Django測驗密鑰關聯
