我有一个控制器类,该类具有返回ModelAndView对象的方法。我正在用junit编写这些方法的单元测试。我应该怎么办?为此是否需要任何单独的配置文件? 我是单元测试的新手。预先感谢任何类型的努力。
首先,我尝试通过此代码配置ApplicationContext.xml文件
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="i18n/messages"/>
<property name="useCodeAsDefaultMessage" value="true"/>
</bean>
<bean id="employeeService" name="employeeService" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="com.slkgroup.spring.web.service.EmployeeService"/>
</bean>
我在EmployeeControllerTest类中对此XML文件进行了注释
请参阅我的代码。
我的控制器类:
package com.slkgroup.spring.web.controller;
import java.util.List;
import org.jboss.logging.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.slkgroup.spring.web.entity.Employee;
import com.slkgroup.spring.web.service.EmployeeService;
@Controller
public class EmployeeController {
private static final Logger logger = Logger.getLogger(EmployeeController.class);
public EmployeeController() {
System.out.println("EmployeeController()");
}
@Autowired
private EmployeeService employeeService;
@RequestMapping(value = {"/","/home"})
public ModelAndView homePage() {
logger.info("homePage: ");
return new ModelAndView("home");
}
String str;
@RequestMapping("createEmployee")
public ModelAndView createEmployee(@ModelAttribute Employee employee) {
logger.info("Creating Employee. Data: "+employee);
return new ModelAndView("employeeForm");
}
@RequestMapping("editEmployee")
public ModelAndView editEmployee(@RequestParam long id, @ModelAttribute Employee employee) {
logger.info("Updating the Employee for the Id "+id);
employee = employeeService.getEmployee(id);
return new ModelAndView("employeeForm", "employeeObject", employee);
}
@RequestMapping("saveEmployee")
public ModelAndView saveEmployee(@ModelAttribute Employee employee) {
logger.info("Saving the Employee. Data : "+employee);
if(employee.getId() == 0){ // if employee id is 0 then creating the employee other updating the employee
employeeService.createEmployee(employee);
} else {
employeeService.updateEmployee(employee);
}
return new ModelAndView("redirect:getAllEmployees");
}
@RequestMapping("deleteEmployee")
public ModelAndView deleteEmployee(@RequestParam long id) {
logger.info("Deleting the Employee. Id : "+id);
employeeService.deleteEmployee(id);
return new ModelAndView("redirect:getAllEmployees");
}
@RequestMapping(value = {"getAllEmployees"})
public ModelAndView getAllEmployees() {
logger.info("Getting the all Employees.");
List<Employee> employeeList = employeeService.getAllEmployees();
return new ModelAndView("employeeList", "employeeList", employeeList);
}
@RequestMapping("searchEmployee")
public ModelAndView searchEmployee(@RequestParam("searchName") String searchName) {
logger.info("Searching the Employee. Employee Names: "+searchName);
List<Employee> employeeList = employeeService.getAllEmployees(searchName);
return new ModelAndView("employeeList", "employeeList", employeeList);
}
}
我的测试控制器类尝试了什么但不起作用:
package com.slkgroup.spring.web.controller;
import static org.junit.Assert.*;
import org.junit.Assert;
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.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.ModelAndView;
import com.slkgroup.spring.web.service.EmployeeService;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:mvc-dispatcher-servlet.xml"})
@WebAppConfiguration
public class EmployeeControllerTest {
@Mock
private EmployeeService employeeService;
@InjectMocks
private EmployeeController employeeController;
private MockMvc mockMvc;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
this.mockMvc = MockMvcBuilders.standaloneSetup(employeeController).build();
}
@Test
public void testHomePage() {
EmployeeController ec = new EmployeeController();
ModelAndView mav= ec.homePage();
Assert.assertEquals("home", mav.getViewName());
}
}