`
jiasongmao
  • 浏览: 661222 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

通过spring管理的web工程的junit单元测试方法二

阅读更多
三、普通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工程的junit单元测试方法四

    通过以上方法,我们可以有效地对Spring管理的Web工程进行单元测试,确保代码的质量和稳定性。在实际开发中,结合代码审查、TDD(测试驱动开发)和CI/CD流程,将使项目更加健壮。记得在编写测试时,保持测试的简洁性...

    junit单元测试及Mock应用,超详细的PPT实战应用

    JUnit5是当前的最新版本,支持Maven项目管理,并且被广泛集成在现代Java开发环境中,如Spring Boot。JUnit5引入了新的注解,如@Test、@BeforeEach、@AfterEach等,使得测试更加灵活和可定制。此外,JUnit5还支持并行...

    详解Spring Boot Junit单元测试

    本篇文章主要介绍了Spring Boot Junit单元测试的重要性和使用方法。单元测试是软件测试中的一种测试方法,通过编写测试用例来验证代码的正确性和稳定性。在Spring Boot项目中,使用Junit框架来进行单元测试是非常...

    spring3和hibernate4WEB工程

    6. **集成测试**:Spring Test和Hibernate的TestNG或JUnit结合,可以方便地进行单元测试和集成测试。通过`@ContextConfiguration`和`@Transactional`注解,可以在测试环境中轻松地启动Spring容器并管理事务。 7. **...

    spring工程

    1. **依赖注入(Dependency Injection,DI)**:这是Spring的核心特性之一,它允许开发者通过外部配置来管理对象的依赖关系,降低了组件之间的耦合度,使得代码更易于测试和维护。 2. **Spring Bean**:在Spring中...

    Test07_Spring_Web_XML.rar

    Spring框架也支持JUnit和Mockito等工具进行单元测试,对于Spring MVC项目,Spring Test模块则提供对Web层的集成测试支持。 总结起来,“Test07_Spring_Web_XML.rar”是一个基础的Spring MVC工程模板,包含了Maven...

    Spring+SpringMVC+Mybatis 基础环境搭建工程(带测试用例)

    8. **测试用例**:工程内可能包含JUnit测试类,对Controller、Service或DAO层进行单元测试,以确保代码的功能正确无误。 通过这个基础环境搭建工程,开发者可以快速理解SSM框架的集成方式,学习如何配置和使用这些...

    Java spring boot 接口工程

    在测试方面,Spring Boot支持集成JUnit和Mockito等工具,方便进行单元测试和集成测试,确保接口的正确性。此外,通过Spring Boot的Actuator模块,可以实现健康检查、指标监控、审计日志等功能,提升系统的运维能力。...

    java maven工程 spring boot 学习源码

    - src/test/java:测试代码目录,使用JUnit或其他测试框架进行单元测试或集成测试。 - pom.xml:Maven的项目对象模型文件,定义了项目的依赖和构建过程。 通过这个学习源码,你可以学习到如何组织Spring Boot的...

    ssh(strust2+hibernate3+spring2)整合最基本web工程

    5. **测试**:编写JUnit测试用例,验证各个层次的逻辑是否正确,确保SSH整合的工程稳定运行。 SSH整合的优点在于,Spring的IoC和AOP能力可以简化应用的结构,提高代码的可测试性和可维护性;Struts2提供了灵活的MVC...

    spring-json 工程依赖

    7. **测试**:使用Spring的MockMVC或JUnit进行单元测试时,可以模拟JSON请求并验证JSON响应。 理解以上知识点,并能熟练地在Eclipse环境中配置和使用这些依赖,对于开发基于Spring的JSON应用至关重要。在实际开发中...

    [web工程]创建web工程

    在IT行业中,Web工程是构建和管理Web应用程序的过程,它涉及到多个技术和工具的综合应用。本文将基于给定的标题“[web工程]创建web工程”来深入探讨Web工程的各个方面,以及如何从零开始创建一个Web项目。我们将不...

    Spring Boot 学习笔记完整教程.pdf

    - JUnit单元测试:集成Junit单元测试的方法和示例。 - 系统环境变量和包扫描:如何读取系统环境变量和自定义Spring Boot应用的包扫描路径。 - 依赖管理:Spring Boot通过引入spring-boot-starter-parent项目作为父...

    采用Spring+Struts2+Hibernate框架,实现一个仿天猫购物网站的web工程。.zip

    8. 编写JUnit测试用例,对业务逻辑进行单元测试。 在tmall_SSH-master这个压缩包中,我们可以期待找到以下文件和目录结构: - src/main/java:包含项目的所有Java源代码,包括实体类、DAO、Service、Action等。 - ...

    Spring MVC eclipse开发(Demo源码)

    Spring MVC支持JUnit进行单元测试,可以对Controller、Service、DAO等进行独立测试,确保代码质量。 13. **RESTful API设计**: Spring MVC支持创建RESTful风格的API,通过HTTP动词(GET、POST、PUT、DELETE)和...

    上传一个ssh整个的工程,方便搭建基于spring的web应用

    9. 测试和调试:使用JUnit进行单元测试,确保各个组件正常工作,然后在服务器上部署应用进行集成测试。 在使用压缩包文件时,开发者需要将"lib2"目录下的所有JAR文件添加到项目的类路径中,以确保所有依赖得到满足...

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    spring_hibernate工程

    Spring是一个强大的应用框架,提供了依赖注入、AOP(面向切面编程)、事务管理等核心功能,而Hibernate则是一个流行的持久层解决方案,它简化了数据库操作,通过ORM将Java对象与数据库表进行映射。 在Spring框架中...

    使用 XFire 与 Spring 开发 Web Service.docx

    5. **测试并访问服务**:通过JUnit测试服务,或者发布到服务器,使用SOAP客户端工具(如SoapUI)进行调用验证。 6. **利用XFire实现客户端**:XFire提供了客户端API,可以便捷地生成代理类,进行服务调用。 **扩展...

Global site tag (gtag.js) - Google Analytics