功能代码按照Spring的标准书写,无论是通过XML配置还是通过annotation配置都可以。
测试代码最重要的是告诉framework去哪里找bean的配置。
以Dao的Test为例:
//告诉framework怎么运行这个类
@RunWith(SpringJUnit4ClassRunner.class)
//bean的配置文件路径,这个是Test类的classpath路径,如果是Spring推荐的目录结构,应该在:项目目录/src/test/resources/里
@ContextConfiguration(locations = "classpath:app-config.xml")
public class TestPatchDao extends AbstractTransactionalJUnit4SpringContextTests {
//取得要测试的Dao类
@Resource
private PatchDao patchDao;
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
/**
* 测试方法
*/
@Test
public void testGetPatchList_1() {
//Dao的某个方法
List<Map<String, Object>> list = patchDao.getPatchList(1, "00C8002D00000000", 1);
assertEquals(1, list.size());
}
}
再举一个Controller的例子
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:app-config.xml", "classpath:mvc-config.xml"})
public class TestMainCtrl extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
private MainCtrl controller;
//这种方法适用于Springframework3.0,3.1换了handler的处理类。
@Autowired
private AnnotationMethodHandlerAdapter handlerAdapter;
private final MockHttpServletRequest request = new MockHttpServletRequest();
private final MockHttpServletResponse response = new MockHttpServletResponse();
@Test
public void testMain4User() throws Exception {
request.setRequestURI("/main");
request.setMethod(HttpMethod.POST.name());
HttpSession session = request.getSession();
//设置 认证信息
session.setAttribute(CommonConstants.SESSION_USER_TYPE, 1);
session.setAttribute(CommonConstants.SESSION_USER_ID, 0);
session.setAttribute(CommonConstants.SESSION_USER_ACC, "aa1");
ModelAndView mav = handlerAdapter.handle(request, response, controller);
assertEquals("/regist", mav.getViewName());
}
}
TestSuite的写法,将Test类用注解的方式配置到TestSuite类上。
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses( { TestPatchDao.class, TestMainCtrl.class })
public class TestSuite {}
这个工具的功能都很实用,它还可以自动生成测试代码。测试代码以独立的项目存在,可以根据功能代码的流程分支生成的测试方法,比如功能代码里有一个if else,测试代码就会生成3个测试方法,以便每个分支都能覆盖到。
我们主要使用它的代码覆盖率功能,这个工具不但可以统计测试时的代码覆盖率,还可以统计debug时的覆盖率。
1、按照安装说明,将工具安装进Eclipse
2、右键点击项目,选择CodePro Tools --> Instrument for Code Coverage。
再运行测试类或debug,都会出覆盖率的统计。
但是统计覆盖率会降低代码运行效率,所以,不需要统计时再 Unistrument 就可以了。
---------------------------------------------
Springframework3.1和springsecure的controller测试类例子:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:root-context.xml",
"classpath:servlet-context.xml", "classpath:security-app-context.xml"})
public class TestSecureCtrl extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
private SecureCtrl controller;
@Autowired
private RequestMappingHandlerAdapter handlerAdapter;
private final MockHttpServletRequest request = new MockHttpServletRequest();
private final MockHttpServletResponse response = new MockHttpServletResponse();
@Test
public void testMain4User() throws Exception {
request.setRequestURI("/secure");
request.setMethod(HttpMethod.POST.name());
HttpSession session = request.getSession();
//设置springsecure的内容
List<GrantedAuthority> ga = new ArrayList<GrantedAuthority>();
ga.add(new GrantedAuthorityImpl("ROLE_ALL"));
User user = new User("account", "password", true, true, true, true, ga);
SecurityContextHolder.getContext().setAuthentication(
new UsernamePasswordAuthenticationToken(user, null));
session.setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, SecurityContextHolder.getContext());
ModelAndView mav = handlerAdapter.handle(request, response, new HandlerMethod(controller, "home", Model.class, HttpServletRequest.class));
assertEquals("home", mav.getViewName());
}
}
分享到:
相关推荐
Spring MVC 是一个强大的Java web开发框架,用于构建可维护、可扩展的...总之,通过正确使用JUnit、Mockito、Spring Test以及MockMVC,我们可以编写出全面、有效的Spring MVC单元测试,确保代码质量并降低潜在的bug。
本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...
在Spring MVC和JPA的开发过程中,单元测试是不可或缺的一部分,它可以帮助我们验证代码的正确性,确保系统各个部分能够按预期工作。本例子聚焦于使用Spring的Test注解进行事务管理的单元测试,这对于数据库操作尤其...
在Spring MVC框架中,单元测试是确保代码质量的重要步骤,特别是在控制器层(Controller)。这篇博客主要探讨了如何使用JUnit进行Spring MVC Controller的单元测试。在实际开发中,单元测试可以帮助我们尽早发现潜在...
Spring MVC提供了MockMVC,可以在不依赖服务器的情况下进行单元测试和集成测试。 这个"最全最经典spring-mvc教程"应该会详细讲解上述所有概念,并可能通过实例演示如何配置、创建和调试Spring MVC项目。对于想要...
十三、如何给Spring3 MVC中的Action做JUnit单元测试:说明了如何对Spring MVC中的控制器进行单元测试,包括配置测试环境和编写测试代码。 十四、Spring MVC转发与重定向:详细讲解了在Spring MVC中如何使用转发和...
#### 七、Spring MVC 单元测试 - **JUnit 测试**:使用 JUnit 和 Mockito 等工具进行单元测试。 - **Mockito**:模拟 Controller 依赖的对象,以确保测试只关注 Controller 的逻辑。 #### 八、Spring MVC 前后端...
在"spring mvc 单元测试 - 记记更好 - 51CTO技术博客.mht"这篇文章中,可能详细介绍了如何设置和使用`MockMvc`进行单元测试,包括配置测试环境、编写测试用例以及断言结果等步骤。 在实际开发中,GuoLong(可能是指...
而JUnit作为Java领域最常用的单元测试框架,可以帮助开发者确保代码的质量和功能的正确性。本测试着重关注Spring MVC架构中的三层:表现层(Presentation Layer)、业务层(Business Logic Layer)和服务数据访问层...
JUnit作为Java领域最流行的单元测试框架,与Spring MVC和Spring Boot的集成使得开发者能够更高效地进行测试驱动开发(TDD)或行为驱动开发(BDD)。下面将详细介绍这个主题中的相关知识点。 1. JUnit JUnit是一个...
9. **单元测试**:利用MockMVC进行Controller层面的单元测试。 10. **源码分析**:通过对Spring MVC源码的阅读和理解,学习其内部工作原理,提升问题排查和性能调优的能力。 以上就是基于提供的信息推测的Spring ...
在Spring Boot框架中,单元测试是一项至关重要的任务,它能够帮助开发者确保代码的正确性和可靠性。Spring Boot提供了方便的工具和库,使得编写和执行单元测试变得简单高效。本章节我们将深入探讨Spring Boot中的...
10. **单元测试和集成测试**:学习如何使用JUnit和Mockito等工具对Controller和Service层进行单元测试,以及使用Spring Test对整个应用进行集成测试。 通过这个简单的例子,初学者可以全面地了解Spring MVC的工作...
Spring MVC提供了MockMvc工具,可以在不启动服务器的情况下进行单元测试和集成测试。 这个“spring MVC_快速入门”文档可能涵盖了以上部分或全部内容,旨在帮助初学者快速理解Spring MVC的工作原理和基本用法。...
在 Spring 中,我们可以使用 `MockMvc` 工具进行单元测试,模拟 HTTP 请求并验证响应结果。 6. **实战案例** - 创建一个简单的 `HelloWorld` 控制器,使用 `@Controller` 注解标记,然后通过 `@RequestMapping` ...
十三、如何给spring3 MVC中的Action做JUnit单元测试? 十四、spring mvc 转发与重定向 十五、spring mvc 处理ajax请求 十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八...