我正在测试一个Springmvc控制器,它得到一个网络服务客户端自动配带,它被嘲笑了。但是嘲笑并没有奏效。在测试返回中调用“验证(stuClient,乘以(1))”。获取所有学生(sAndP命令);
Wanted but not invoked:
stuClient.getAllStudents(
com.xyz.crudserviceclient.utilitybeans.SortablePagedCommand@3028e50e
);
-> at com.xyz.controllers.StudentControllerTest.testGetHomePage(StudentControllerTest.java:101)
Actually, there were zero interactions with this mock.
at com.xyz.controllers.StudentControllerTest.testGetHomePage(StudentControllerTest.java:101).....
下面是我测试中的控制器方法:
@RequestMapping(value = "/getHomePage.do", method = RequestMethod.GET)
public ModelAndView getHomePage(@RequestParam(value = "first", required = false) Integer first,
@RequestParam(value = "max", required = false) Integer max, @RequestParam(value = "sortBy",
required = false) String sortBy,
@RequestParam(value = "sortDirection", required = false) String sortDir) {
ModelAndView mav = new ModelAndView("home");
SortablePagedCommand sortablePagedCommand = new SortablePagedCommand();
sortablePagedCommand.setFirst(first);
sortablePagedCommand.setMax(max);
sortablePagedCommand.setSort(sortBy);
sortablePagedCommand.setSortDir(sortDir);
PagedResult<StudentBean> students = studentServiceClient.getAllStudents(sortablePagedCommand);
List<StudentBean> studentList = students.getItems();
int noOfRecords = students.getUnfilteredItems();
int noOfPages = (int) Math.ceil(noOfRecords * 1.0 / max);
mav.addObject("sortByField", sortBy);
mav.addObject("sortDirField", sortDir);
mav.addObject("studentList", studentList);
mav.addObject("noOfPages", noOfPages);
mav.addObject("currentPage", first);
return mav;
}
下面是我的测试类:
package com.xyz.controllers;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.hasItems;
import static org.hamcrest.Matchers.hasProperty;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
import java.sql.Date;
import java.util.Arrays;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import com.xyz.crudserviceclient.beans.StudentBean;
import com.xyz.crudserviceclient.client.StudentServiceClient;
import com.xyz.crudserviceclient.utilitybeans.PagedResult;
import com.xyz.crudserviceclient.utilitybeans.SortablePagedCommand;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:WebContent/WEB-INF/dispatcher-servlet.xml" })
@WebAppConfiguration
public class StudentControllerTest {
private MockMvc mockMvc;
@InjectMocks
private StudentController controller;
@Mock
private StudentServiceClient stuClient;
@Autowired
private WebApplicationContext webAppContext;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.webAppContextSetup(webAppContext).build();
Mockito.reset(stuClient);
}
@SuppressWarnings("unchecked")
@Test
public void testGetHomePage() throws Exception {
StudentBean sb1 = new StudentBean();
sb1.setFirstName("Sai");
sb1.setLastName("Palaparthi");
sb1.setGender("Male");
sb1.setDOB(new Date(System.currentTimeMillis()));
sb1.setEmail("v.p@gmail.com");
sb1.setMobileNumber("8121157247");
sb1.setAddress("Huda");
sb1.setCourses(Arrays.asList("Math", "Chem"));
StudentBean sb2 = new StudentBean();
sb2.setFirstName("Viswanath");
sb2.setLastName("Palaparthi");
sb2.setGender("Male");
sb2.setDOB(new Date(System.currentTimeMillis()));
sb2.setEmail("v.p@gmail.com");
sb2.setMobileNumber("8121157248");
sb2.setAddress("Huda");
sb2.setCourses(Arrays.asList("Math"));
PagedResult<StudentBean> pResult = new PagedResult<StudentBean>(
Arrays.asList(sb1, sb2), 2);
pResult.setFirst(0);
pResult.setUnfilteredItems(2);
Integer first = 0;
Integer max = 5;
String sortBy = "firstname";
String sortDir = "asc";
SortablePagedCommand sAndPCommand = new SortablePagedCommand();
sAndPCommand.setFirst(first);
sAndPCommand.setMax(max);
sAndPCommand.setSort(sortBy);
sAndPCommand.setSortDir(sortDir);
Mockito.when(stuClient.getAllStudents(sAndPCommand))
.thenReturn(pResult);
mockMvc.perform(
get("/getHomePage.do").param("first", String.valueOf(first))
.param("max", String.valueOf(max))
.param("sortBy", sortBy)
.param("sortDirection", sortDir))
.andExpect(status().isOk())
.andExpect(view().name("home"))
.andExpect(forwardedUrl("/jsps/home.jsp"))
.andExpect(model().attribute("sortByField", is(sortBy)))
.andExpect(model().attribute("sortDirField", is(sortDir)))
.andExpect(model().attribute("noOfPages", 1))
.andExpect(model().attribute("currentPage", is(first)))
.andExpect(model().attribute("studentList", hasSize(2)))
.andExpect(
model().attribute(
"studentList",
hasItem(allOf(
hasProperty("firstName", is("Sai")),
hasProperty("lastName",
is("Palaparthi")),
hasProperty("gender", is("Male")),
hasProperty(
"dob",
is(new Date(System
.currentTimeMillis()))),
hasProperty("email",
is("v.p@gmail.com")),
hasProperty("mobileNumber",
is("8121157247")),
hasProperty("address", is("Huda")),
hasProperty("courses",
hasItems("Math", "Chem"))))))
.andExpect(
model().attribute(
"studentList",
hasItem(allOf(
hasProperty("firstName",
is("Viswanath")),
hasProperty("lastName",
is("Palaparthi")),
hasProperty("gender", is("Male")),
hasProperty(
"dob",
is(new Date(System
.currentTimeMillis()))),
hasProperty("email",
is("v.p@gmail.com")),
hasProperty("mobileNumber",
is("8121157248")),
hasProperty("address", is("Huda")),
hasProperty("courses", hasItems("Math"))))));
verify(stuClient, times(1)).getAllStudents(sAndPCommand);
verifyNoMoreInteractions(stuClient);
}
}
你完全做错了——这显然是一个集成测试,那么为什么要涉及Mockito呢;此外,您正在将模拟注入控制器字段,但您的测试没有调用控制器字段——它们正在从Spring上下文与控制器bean交互。
看看这个优秀的教程,尤其是单元测试部分。
总而言之,您的测试设置需要更改,您不需要任何注释,还必须为控制器使用独立的MockMvc设置:
public class StudentControllerTest {
private MockMvc mockMvc;
@InjectMocks
private StudentController controller;
@Mock
private StudentServiceClient stuClient;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
Mockito.reset(stuClient);
}
我试图使用PowerMockito在我正在测试的代码中模拟java.net.URL类的创建。基本上,我希望防止真正的HTTP请求发生,而是1)在请求发出时检查数据,2)在模拟响应中提供我自己的测试数据。这就是我正在尝试的: 我要测试的代码如下所示: 在前面的测试场景中,我模拟了wlInvokeUrlString以匹配“MyURLString”。我还尝试使用whenNew行的各种其他形式,尝试注入模
使用mockito模拟一个方法会确保永远不会调用被模拟的方法吗?我有一个主类,它包含一些我想为其编写单元测试的代码,还有一个单元测试类MainTest,它包含主类的单元测试。 eg: 源类: JUnit测试(使用mockito) 这项测试失败了。为什么?
我无法使用mockito2模拟一个Kotlin final类。另外我还在用Robolectric。 这是我的测试代码: 请注意,我使用的是Mockito Version2,我使用的是依赖项,它自动启用模拟最终类的功能。
我想在类AppleProcessor中测试一个方法: 请注意,Fruit是AppleFruit实现的方法的接口,并且还有一个方法。 我的测试看起来像: 然而,我得到了以下错误:
我是莫基托的新手。我试图通过模拟数据库交互为服务编写jnuit: 我有下面的类(只是实际类的代表) 我的测试课就像是 但是当我运行这个测试时,它仍然调用实际的db调用并从DB中检索值,而不是模拟值,我应该模拟sql连接和非默认构造函数吗?我一无所知。 -- 更新 正如人们所建议的那样,我将DAO实例化移动到我的服务构造函数中,并且还使用了Spy,但是我仍然调用了实际的DB调用而不是模拟调用。
我的测试存根是 我在这里做错了什么?