在以前总认为做web开发是一件比较头疼的,至少页面让我比较头疼,还有最最中的的是以前总认为我对action层的代码进行测试必须得等到界面写出来才可以进行测试。等真正做了web开发才发现,以前的自己是多么的无知,呵呵!原来可以使使用mock对它进行测试。
假如action的一函数
@Controller
@RequestMapping
public 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
*/
@RequestMapping
public 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;
@Autowired
private 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.....");
}
@Test
public 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"));
}
@Test
public 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));
}
}
分享到:
相关推荐
在传统的Struts1应用程序中,Action类往往需要与`HttpServletRequest`和`HttpServletResponse`对象交互,这使得直接对Action类进行单元测试变得非常困难。因此,引入Mock技术就显得尤为重要。通过模拟`...
在Struts2中,有多种方式来实现Mock测试: 1. `junit怎么测试struts里的Action.htm`:这个文件名暗示了如何使用JUnit进行Struts2 Action的测试。JUnit是Java开发中最常用的单元测试框架,可以配合Mockito或EasyMock...
在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境的搭建是一个非常重要的步骤。本文将详细介绍如何在 Struts2+Spring+Hibernate 框架中搭建 Action 的单元测试环境。 首先,需要了解为什么需要对 ...
4. 测试Action类:通过模拟Service层的依赖,直接测试Action类的execute()方法,确保业务逻辑的正确性。 四、测试实践 在案例中,你将看到如何创建测试类,定义测试方法,设置测试数据,以及如何利用JUnit和Spring...
例如,当测试一个Action时,可能会用Mock对象来替代实际的Service,以避免对数据库或其他服务的依赖。 8. **持续集成(CI)**:项目可能集成了持续集成工具,如Jenkins或GitLab CI/CD,这样每次代码提交都会触发...
总之,单元测试是保证代码质量的重要手段,在Struts+Spring的环境下,需要结合JUnit和Mockito等工具,对Action、Service和DAO进行有效的测试,确保每一层的功能都能够正确无误地工作。通过详尽的测试,可以提前发现...
Struts2框架是一款广泛应用于Java Web开发中的开源MVC框架,它简化了Web应用程序的构建,使得业务逻辑、控制逻辑和视图层得以分离。单元测试对于任何软件项目都至关重要,因为它能确保代码的正确性,提高代码质量...
- **第11章:界面层测试**:针对用户界面的测试方法和技术。 - **第12章:Ajax测试**:探讨如何测试异步JavaScript和XML(Ajax)应用。 - **第13章:使用Cactus进行服务器端测试**:介绍如何对服务器端进行有效的...
而“src”目录通常包含项目的源代码,可能包括Hibernate的实体类、DAO(Data Access Object)层、Service层以及Struts2或Struts的Action类等。 这个项目可能是为了演示如何在BIRT报表中利用Hibernate查询数据库,...
接着,对于Struts2的Action类,通常我们需要模拟Service层的调用来测试Action的行为。可以利用Mockito这样的库来创建mock对象,使得Action不依赖于真实的Service执行。例如,通过`@Mock`注解创建mock Service,然后...
6. **Mock Objects**:为了隔离Action类,可能使用了Mock对象来模拟Service层的调用,这样可以专注于Action的逻辑测试,而不是依赖外部服务。 7. **预期结果文件**:可能包括一些预期的输出结果,用于与实际测试...
在实际开发中,Webwork还强调了可测试性,通过分离业务逻辑和表示层,使得单元测试更加便捷。书中会详细讲解如何利用Mock对象和依赖注入进行测试,以保证代码质量。 除了核心技术外,《Webwork.in.Action》也会涵盖...
单元测试通常是对单个组件,如Action、Service或DAO类进行独立的测试,以验证它们的功能是否按预期工作。以下是如何在Struts+Spring环境中进行单元测试的详细步骤和关键点: 首先,我们来看一下Struts框架下Action...
对于更复杂的测试场景,如模拟对象(Mock Objects)和测试隔离,书中也进行了详尽的探讨。JUnit支持使用注解(Annotations)来简化测试配置,例如@Test、@Before和@After,这些在书中都有清晰的解释和实例展示。同时...
通过对不同类型的测试(如单元测试、集成测试等)的讨论,帮助读者理解如何制定有效的测试策略。 - **第6章:使用存根进行粗粒度测试** 存根(stubs)是一种模拟对象,用于替换真实的依赖项。本章将介绍如何...