对action层做mock测试
在以前总认为做web开发是一件比较头疼的,至少页面让我比较头疼,还有最最中的的是以前总认为我对action层的代码进行测试必须得等到界面写出来才可以进行测试。等真正做了web开发才发现,以前的自己是多么的无知,呵呵!原来可以使使用mock对它进行测试。
假如action的一函数
@Controller@RequestMappingpublic class ExperimentController {@Resource(name = "experimentService")private IExperimentService experimentService;private final String ERROR_PAGE = "/core/404";/** * To add or modify a Experiment object * * @param experiment Experiment * @param request HttpServletRequest * @param response HttpServletResponse * @return the path that is after added successfully path */@RequestMappingpublic String addOrModifyExperiment(Experiment experiment, HttpServletRequest request, HttpServletResponse response) {if (experiment.getStatus() == null) {request.setAttribute("message", "The fileds of experiment that is status can't be empty!");return "/bio/manage/experiment";}if (!experimentService.addOrModifyExperiment(experiment)) {request.setAttribute("messages", "Add failed!");return ERROR_PAGE;}return "/bio/manage/experiment";}}其对应的测试类为:
package com.founder.cims.bio.action;import javax.annotation.Resource;import javax.sql.DataSource;import junit.framework.Assert;import org.apache.log4j.Logger;import org.junit.After;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.mock.web.MockHttpServletRequest;import org.springframework.mock.web.MockHttpServletResponse;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.founder.cims.bio.model.Experiment;import com.founder.cims.bio.model.ExperimentProcess;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {"classpath:/spring/applicationContext.xml"})public class AddExperimentProcessTest extends AbstractTransactionalJUnit4SpringContextTests{private static final Logger logger = Logger.getLogger(AddExperimentProcessTest.class);private MockHttpServletRequest request;private MockHttpServletResponse response;private ExperimentProcess experimentProcess = null;@Autowiredprivate ManagerController managerController;@Override@Resource(name = "dataSource")public void setDataSource(DataSource dataSource) { super.setDataSource(dataSource);}@Before public void before(){ logger.info("before....."); request = new MockHttpServletRequest();response = new MockHttpServletResponse(); } @After public void after(){ logger.info("after....."); } @Testpublic void testAddExperimentProcessStatusIsNull() {Experiment experiment = new Experiment();experiment.setId(1);experimentProcess = new ExperimentProcess();experimentProcess.setName("test solfware");experimentProcess.setExperiment(experiment);managerController.addExperimentProcess(experimentProcess, request, response);Assert.assertEquals("The fileds of experimentProcess that is status and name can't be empty!", request.getAttribute("message"));}@Testpublic void testAddExperimentSucess() {Experiment experiment = new Experiment();experiment.setId(1);experimentProcess = new ExperimentProcess();experimentProcess.setStatus(1);experimentProcess.setName("test solfware");experimentProcess.setExperiment(experiment);Assert.assertEquals("/bio/manage/experimentProcess", managerController.addExperimentProcess(experimentProcess, request, response));}}