单元测试
用来检验目标代码中很小的一部分。通常一个单元测试用于判断某个特定条件或者特定场景下的某个特定函数的行为。如果对某个功能模块进行单元测试时,我们希望屏蔽对外在功能模块的屏蔽,以便将焦点放在目标模块的测试上,可以使用虚拟对象模拟外在模块的行为。这样单元测试可以假想在外在模块正确的情况下本模块的逻辑的正确性了。单元测试下不应该依赖于spring容器,通过模拟对象完成单元测试。
如下是对Action的单元测试
UserAction
@ParentPackage("default")
@Namespace("/user")
public class UserAction extends ActionSupport{
@Autowired
private IUserService userService;
private User user;
@Action(value = "test", results = {@Result(name = "success", location = "/index.jsp")})
public String test() {
try{
userService.save(user);
return SUCCESS;
}catch(Exception e){
e.printStackTrace();
return "error";
}
}
@Action(value = "test2", results = {@Result(name = "success", location = "/index.jsp")})
public String test2() {
try{
User user=userService.findUser(getUser().getId());
if(user.getName().equals("xxx"))
return SUCCESS;
else
throw new Exception();
}catch(Exception e){
e.printStackTrace();
return "error";
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public IUserService getUserService() {
return userService;
}
public void setUserService(IUserService userService) {
this.userService = userService;
}
}
UserService
public class UserService implements IUserService{
@Autowired
private UserDao userDao;
@Transactional(rollbackFor=Exception.class)
public void save(User userObject)throws Exception {
try{
userDao.save(userObject);
if(userObject.getName().equals("admin"))
throw new Exception("fuck");
}catch(Exception e){
throw e;
}
}
public User findUser(long id){
return userDao.findById(id);
}
}
YhActionTest
public class YhActionTest extends AbstractModelAndViewTests {
public void testYhlist(){
MockHttpServletRequest request=new MockHttpServletRequest();
MockHttpSession session=new MockHttpSession();
request.setSession(session);
UserAction mAction=new UserAction();
IUserService yhService= EasyMock.createMock(IUserService.class);
mAction.setUserService(yhService);
User yh=new User();
yh.setId(100);
yh.setName("xxx");
yh.setPassword("xxxx");
EasyMock.expect(yhService.findUser(yh.getId())).andReturn(yh);
EasyMock.replay(yhService);
mAction.setUser(yh);
String r=mAction.test2();
assertEquals(r, "success");
EasyMock.verify(yhService);
}
}
MockHttpServletRequest ,MockHttpSession 是虚拟的request,session,因为不是web环境中,所以需要虚拟这两个对象,(本测试没用到)。IUserService yhService= EasyMock.createMock(IUserService.class);是虚拟一个服务类实例。
集成测试
集成测试是在功能完成后,验证模块之间匹配调用的正确性而进行的测试。一般对业务层和web层进行集成测试。集成测试应该是事先装配好模块和模块之间的关联。因此需要spring配置文件的作用,启动spring容器。
建立测试目录
test/action test/service
将applicationContext.xml和dataSource.properties放到test根目录下面。另struts.xml需要在src根目录下。因为不是启动web容器,所以,不会将web-inf中的applicationContext.xml和dataSource.properties加载进classes路径中。所以需要放到test下面。
test/action/UserActionTest
测试action+service+dao
public class UserActionTest extends StrutsSpringTestCase{
private UserAction mAction;
private ActionProxy proxy;
@Override
public String[] getContextLocations() {
return new String[]{"classpath:applicationContext.xml"};
}
public void testLogin() throws Exception {
User user=new User();
user.setName("yuyong");
user.setPassword("890806");
proxy = getActionProxy("/user/test");
mAction = (UserAction) proxy.getAction();
mAction.setUser(user);
assertEquals("success",mAction.test());
user.setName("admin");
mAction.setUser(user);
assertEquals("error",mAction.test());
}
}
test/action/AbstractSpringContextTests1
测试service+dao
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= "classpath:applicationContext.xml")
@TransactionConfiguration(defaultRollback=true)
@Transactional
public class AbstractSpringContextTests1{
@Resource
private IUserService yhService;
@Test
public void save() throws Exception {
User user=new User();
user.setName("admin");
user.setPassword("134");
yhService.save(user);
}
}
鄙人才疏学浅,如有不对,望各位前辈细心指出。谢谢。
分享到:
相关推荐
根据提供的文件信息,我们可以深入探讨如何为SSH2框架中的Action组件编写单元测试。这份文档将涵盖以下几个关键知识点:Maven依赖配置、Struts2配置、Spring集成以及具体的Action类实现和测试方法。 ### Maven依赖...
SSH单元测试与DbUnit整合 在软件开发过程中,单元测试是一个非常重要的步骤,它可以确保代码的正确性和可靠性。今天,我们将讨论如何使用JUnit和DbUnit进行单元测试,并将其与SSH整合。 SSH单元测试 在SSH项目中...
最后,JUnit是Java单元测试的框架,它在开发过程中起到了关键的角色,帮助开发者编写和运行测试用例,确保代码的正确性和稳定性。在SSH项目中,JUnit可以帮助开发者对各个组件进行独立测试,确保每个部分都按预期...
标题“使用junit测试ssh中的dao”涉及到的是Java开发中的单元测试技术,特别是针对SSH(Struts2、Spring、Hibernate)框架中的数据访问对象(DAO)进行测试。SSH是Java Web开发中常用的三大开源框架,它们协同工作以...
在SSH框架中,开发测试往往包括单元测试、集成测试和系统测试。单元测试主要针对单个类或方法,使用JUnit和Mockito等工具;集成测试则是验证多个组件之间的交互,通常会涉及到数据库操作;系统测试则是在整个系统...
测试是验证整合是否成功的关键步骤,这通常涉及单元测试、集成测试和端到端测试。可以使用JUnit、Mockito等工具对单个组件进行测试,然后通过模拟HTTP请求进行集成测试,最后通过实际运行应用程序并验证其功能来确保...
2. **集成测试**:测试不同组件之间的交互,例如Struts的Action到Service的调用,以及Service对Hibernate DAO的调用。这一步确保了各个组件在组合使用时能正常协同工作。 3. **功能测试**:模拟用户操作,验证整个...
9. **测试和部署**:系统开发完成后,需进行单元测试、集成测试和压力测试,确保所有功能正常运行。部署时,可能涉及服务器配置、应用服务器选择(如Tomcat、Jetty等)、数据库配置等。 综上所述,这个"SSH2实现的...
5. **测试友好**:SSH框架支持单元测试和集成测试,提高了代码质量。 在实际开发中,SSH集成通常会结合其他工具和技术,如MyBatis(用于部分SQL定制需求)、Freemarker或Thymeleaf(作为视图模板引擎)、Maven或...
8. **测试和调试**:通过单元测试和集成测试确保各部分功能正常运行。 在学习和使用SSH集成框架的过程中,开发者需要理解每个框架的核心概念,熟练掌握它们的配置方法,以及如何在它们之间进行有效集成。例如,...
8. **单元测试和集成测试**:考虑到项目涉及网络通信,开发者可能使用JUnit或其他测试框架编写了测试用例,以确保SSH2连接和相关功能的正确性。 9. **代码结构和设计模式**:良好的代码组织和设计模式(如工厂模式...
总结起来,SSH项目的单元测试需要关注Spring的IoC容器、Struts的业务逻辑和Hibernate的数据持久化。通过JUnit、Spring Test和dbunit,我们可以对每个部分进行有效的测试,确保代码的正确性和稳定性。在实际项目中,...
8. 测试:编写单元测试和集成测试,确保各个组件协同工作。 SSH2框架整合的优势在于: 1. 分层架构:将业务逻辑、数据访问和视图呈现分离,提高了代码的可读性和可维护性。 2. 解耦合:通过依赖注入,降低了组件间...
5. 测试:进行单元测试、集成测试和压力测试,确保系统稳定可靠。 通过SSH2项目练习,开发者可以深入理解这三个框架的集成应用,提升Java Web开发能力,同时也能积累实际项目经验,提高解决实际问题的能力。
6. **测试**:进行单元测试和集成测试,确保各个组件之间的交互正常。 在实际开发中,SSH集成可以提供强大的功能和良好的架构,但同时也增加了项目复杂性,需要开发者具备多方面的技术知识。因此,对于Java开发人员...
SSH2指的是Spring、Struts2和Hibernate这三个开源框架的组合,它们分别是Java Web开发中的依赖注入容器、MVC框架和持久层框架。而Jbpm(Business Process Management)则是一个强大的工作流管理系统,用于设计、执行...
7. **单元测试与集成测试**:SSH2框架支持JUnit和Mockito等工具进行单元测试,对于整个系统,可以使用Spring的TestContext框架进行集成测试,确保各组件协同工作。 8. **性能优化**:通过对缓存策略的配置,可以...
- **测试**:SSH整合的项目通常会包含单元测试和集成测试,利用Mockito、JUnit等工具对各个组件进行独立验证,确保功能正确且健壮。 通过这个"ssh集成类库整合"的压缩包,开发者可以获得预配置的SSH框架,减少了...
标题"SSH.rar_myeclipse ssh_ssh_ssh myeclipse_ssh2_ssh2 Myeclipse"表明这是一个关于SSH配置和MyEclipse集成的资源包,可能包含了SSH框架在MyEclipse中的配置教程,以及SSH2(更安全的SSH版本)的相关资料。...
8. 整合测试:运行项目,进行单元测试和集成测试,确保各个部分正常工作。 这个"SSH完整整合空项目"提供了一个基础的框架结构,让初学者可以在此基础上添加自己的业务逻辑,实践SSH的整合应用。通过学习和实践这个...