三、普通Web测试情形
在此,我们将回顾测试Web组件的普通情形以及怎样在其中使用Spring的mock对象和JUnit框架扩展。
(一)确定一个正确的视图
基于输入参数生成正确的视图可能是在操作一个Web应用程序时最普通的功能。在Spring MVC的上下文中,这意味着Spring MVC将基于参数的状态返回某种ModelAndView对象。你可以通过简单地利用如下的Mock对象以一个常规JUnit测试方式来测试这项功能:
public void final testGettingToDetails throws Exception{
MyC myC = new MyController();
myController.setDetailsView( detailsViewName );
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResp resp = new MockHttpServletResponse();
request.setMethod("POST");
request.addParameter("viewDetails", "true");
ModelAndView modelAndView = myController.handleRequest(request, response);
assertEquals("Incorrect view name", detailsViewName,modelAndView.getViewName());
既然控制器很可能会利用一些服务对象来决定结果视图,那么你还可以定制控制器中所用的这些mock服务对象。关于利用定制对象的更多资料,请参考mockobjects.com。
#p#(二)会话相关的操作
对于任何J2EE Web应用程序来说,另一个必须实现的操作是HttpSessi MVC可能需要决定是否一个对象处于会话中及其具体状态以便产生正确的结果。你可以利用MockHttpSession对象和JUnit框架测试这种情形。请参考如下的代码片断:
public void testInvokesCorrectMethodWithSessi throws Exception {
TestC c = new TestController();
MockHttpServletRequest request = new MockHttpServletRequest(
"GET", "/invoiceView.app");
request.setSessi MockHttpSession(null));
HttpServletResp resp = new MockHttpServletResponse();
ModelAndView mv = cont.handleRequest(request, response);
assertTrue("Invoked loggedIn method", cont.wasInvoked("loggedIn"));
assertTrue("view name is ",mv.getViewName().equals("loggedIn"));
assertTrue("Only method invoked", cont.getInvokedMethods() == 1);
//测试控制器但是不使用会话
request = new MockHttpServletRequest("GET", "/invoiceView.app");
resp = new MockHttpServletResponse();
try {
cont.handleRequest(request, response);
fail("Should have rejected request without session");
}
catch (ServletException ex) {
//在此加入期盼的异常处理
}
}
(三)转发和重定向
一个Spring MVC组件执行的操作能够导致转发或重定向到另一个URL。如果你的目标是分析转发或重定向的结果,那么你可以测试这一情形—通过分析MockHttpResponse对象并进而确定有哪些内容包含在它的重定向或转发值中,如下所示:
String resp = ((MockHttpServletResponse)httpResponse).getForwardedUrl();
assertEquals( "Did not forward to the expected URL", resp expectedString);
四、生成正确的二进制输出
如何确定你有多少次必须实现“View as PDF”这一功能?下面的JUnit代码片断使用mock输出流对象实现这一功能的正确测试:
public void testPDFGenerati throws Exception{
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResp resp = new MockHttpServletResponse();
viewInvoiceAsPDFController.handleRequest( request, resp );
byte[] resp = response.getContentAsByteArray();
byte[] expectedPDFValues = loadBytesFromTestFile();
assertTrue( "Did not generate expected PDF content.",
Arrays.equals(resp ));
}
注意,在此你的控制器ViewInvoiceAsPDFController不是返回ModelAndView对象,而是产生了二进制输出—你可以使用一个二进制的数组形式来捕获此控制器并对此进行正确性评价。
分享到:
相关推荐
通过以上方法,我们可以有效地对Spring管理的Web工程进行单元测试,确保代码的质量和稳定性。在实际开发中,结合代码审查、TDD(测试驱动开发)和CI/CD流程,将使项目更加健壮。记得在编写测试时,保持测试的简洁性...
JUnit5是当前的最新版本,支持Maven项目管理,并且被广泛集成在现代Java开发环境中,如Spring Boot。JUnit5引入了新的注解,如@Test、@BeforeEach、@AfterEach等,使得测试更加灵活和可定制。此外,JUnit5还支持并行...
本篇文章主要介绍了Spring Boot Junit单元测试的重要性和使用方法。单元测试是软件测试中的一种测试方法,通过编写测试用例来验证代码的正确性和稳定性。在Spring Boot项目中,使用Junit框架来进行单元测试是非常...
随着软件工程的发展,单元测试与集成测试作为软件质量保证的重要组成部分,在Java Web项目的开发过程中扮演着至关重要的角色。本文将详细介绍Java Web项目中单元测试与集成测试的实践方法,并结合实际案例,探讨如何...
6. **集成测试**:Spring Test和Hibernate的TestNG或JUnit结合,可以方便地进行单元测试和集成测试。通过`@ContextConfiguration`和`@Transactional`注解,可以在测试环境中轻松地启动Spring容器并管理事务。 7. **...
1. **依赖注入(Dependency Injection,DI)**:这是Spring的核心特性之一,它允许开发者通过外部配置来管理对象的依赖关系,降低了组件之间的耦合度,使得代码更易于测试和维护。 2. **Spring Bean**:在Spring中...
Spring框架也支持JUnit和Mockito等工具进行单元测试,对于Spring MVC项目,Spring Test模块则提供对Web层的集成测试支持。 总结起来,“Test07_Spring_Web_XML.rar”是一个基础的Spring MVC工程模板,包含了Maven...
8. **测试用例**:工程内可能包含JUnit测试类,对Controller、Service或DAO层进行单元测试,以确保代码的功能正确无误。 通过这个基础环境搭建工程,开发者可以快速理解SSM框架的集成方式,学习如何配置和使用这些...
在测试方面,Spring Boot支持集成JUnit和Mockito等工具,方便进行单元测试和集成测试,确保接口的正确性。此外,通过Spring Boot的Actuator模块,可以实现健康检查、指标监控、审计日志等功能,提升系统的运维能力。...
- src/test/java:测试代码目录,使用JUnit或其他测试框架进行单元测试或集成测试。 - pom.xml:Maven的项目对象模型文件,定义了项目的依赖和构建过程。 通过这个学习源码,你可以学习到如何组织Spring Boot的...
5. **测试**:编写JUnit测试用例,验证各个层次的逻辑是否正确,确保SSH整合的工程稳定运行。 SSH整合的优点在于,Spring的IoC和AOP能力可以简化应用的结构,提高代码的可测试性和可维护性;Struts2提供了灵活的MVC...
7. **测试**:使用Spring的MockMVC或JUnit进行单元测试时,可以模拟JSON请求并验证JSON响应。 理解以上知识点,并能熟练地在Eclipse环境中配置和使用这些依赖,对于开发基于Spring的JSON应用至关重要。在实际开发中...
在IT行业中,Web工程是构建和管理Web应用程序的过程,它涉及到多个技术和工具的综合应用。本文将基于给定的标题“[web工程]创建web工程”来深入探讨Web工程的各个方面,以及如何从零开始创建一个Web项目。我们将不...
- JUnit单元测试:集成Junit单元测试的方法和示例。 - 系统环境变量和包扫描:如何读取系统环境变量和自定义Spring Boot应用的包扫描路径。 - 依赖管理:Spring Boot通过引入spring-boot-starter-parent项目作为父...
8. 编写JUnit测试用例,对业务逻辑进行单元测试。 在tmall_SSH-master这个压缩包中,我们可以期待找到以下文件和目录结构: - src/main/java:包含项目的所有Java源代码,包括实体类、DAO、Service、Action等。 - ...
Spring MVC支持JUnit进行单元测试,可以对Controller、Service、DAO等进行独立测试,确保代码质量。 13. **RESTful API设计**: Spring MVC支持创建RESTful风格的API,通过HTTP动词(GET、POST、PUT、DELETE)和...
9. 测试和调试:使用JUnit进行单元测试,确保各个组件正常工作,然后在服务器上部署应用进行集成测试。 在使用压缩包文件时,开发者需要将"lib2"目录下的所有JAR文件添加到项目的类路径中,以确保所有依赖得到满足...
Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。 Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...
Spring是一个强大的应用框架,提供了依赖注入、AOP(面向切面编程)、事务管理等核心功能,而Hibernate则是一个流行的持久层解决方案,它简化了数据库操作,通过ORM将Java对象与数据库表进行映射。 在Spring框架中...
5. **测试并访问服务**:通过JUnit测试服务,或者发布到服务器,使用SOAP客户端工具(如SoapUI)进行调用验证。 6. **利用XFire实现客户端**:XFire提供了客户端API,可以便捷地生成代理类,进行服务调用。 **扩展...