`
m635674608
  • 浏览: 5030821 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

利用junit对springMVC的Controller进行测试

阅读更多

平时对junit测试service/DAO层已经很熟悉不过了,但是要测试controller层,不能总重启服务器吧,那么我们就用junit4模拟请求,测试controller层的方法。

 

代码示例:

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.WebApplicationContext;

/**
 * @author yhb
 * 2016-4-18
 */
@RunWith(SpringJUnit4ClassRunner.class)  
@WebAppConfiguration  
@ContextConfiguration({"classpath:spring.xml","classpath:spring-mvc.xml"}) 
//这里可以声明一个事务管理 每个单元测试都进行事务回滚 无论成功与否  
@TransactionConfiguration(defaultRollback = true)  
@Transactional 
public class TestController {
@Autowired  
    private WebApplicationContext wac;  
  
    private MockMvc mockMvc; 
    
    @Before  
    public void setup() {   
        this.mockMvc = webAppContextSetup(this.wac).build();  
    } 
    
    @Test  
    public void testLogin() throws Exception {  
        mockMvc.perform((post("/loginTest").param("userName", "admin").param("password", "123"))).andExpect(status().isOk())  
                .andDo(print());  
    } 
    
    /*@Test  
    //有些单元测试你不希望回滚  
    @Rollback(false)  
public void testInsert() throws Exception {  
    mockMvc.perform((post("/insertTest"))).andExpect(status().isOk())  
            .andDo(print());  
} */
}

 

可能会出现

java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig
at org.springframework.test.context.web.AbstractGenericWebContextLoader.configureWebResources(AbstractGenericWebContextLoader.java:200)
at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:127)
at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:60)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:109)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:261)
at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:68)
at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:86)
at org.springframework.test.context.DefaultTestContext.getApplicationContext(DefaultTestContext.java:72)
at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:170)
at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:110)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:212)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:200)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:252)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:254)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:217)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:83)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:68)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:163)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.lang.ClassNotFoundException: javax.servlet.SessionCookieConfig
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 32 more

如果你是maven项目的话可以添加依赖:

<dependency>
       <groupId>org.apache.geronimo.specs</groupId>
       <artifactId>geronimo-servlet_3.0_spec</artifactId>
       <version>1.0</version>
       <scope>test</scope>

</dependency>

参考:http://stackoverflow.com/questions/21561432/failed-to-load-applicationcontext-during-spring-unit-test

 

http://blog.csdn.net/dabinge1/article/details/51181521

分享到:
评论

相关推荐

    springmvc+mybatis+maven+junit实现网页的增删查改

    在`src/test/java`下,为每个Service或Controller创建测试类,利用Mockito模拟依赖,对各个功能进行单元测试。例如,`UserServiceTest`可以测试UserService的所有CRUD操作。 最后,我们使用Maven进行项目的构建和...

    springMVC junit mybatis整合

    6. **编写测试用例**:利用JUnit创建测试类,对Service层的方法进行单元测试,确保其功能正确。 通过以上步骤,我们可以将SpringMVC、JUnit和MyBatis成功地整合在一起,形成一个完整的Web应用开发环境。这种整合...

    springMVC+mybatis+maven+junit

    JUnit支持注解,使得测试代码更简洁,同时与Mockito等库配合使用,可以进行模拟对象测试,隔离被测试代码的依赖。 这四个技术结合在一起,可以构建出一套完整的开发流程:使用Maven管理项目依赖和构建流程,Spring ...

    maven+springMVC+mybatis+junit详细搭建过程整合实现demo,带有jar包和测试类。增删改查的操作供大家学习。

    在这个演示项目中,我们有专门的测试类,利用JUnit对业务逻辑进行单元测试,确保其功能的正确性。 项目中包含的`mydays.sql`文件是数据库脚本,它包含了创建数据库表结构以及初始化数据的SQL语句。在开始项目之前,...

    springmvc ssh通用的junit测试样例

    在SSH项目中,测试通常涉及对每个层次的组件进行独立验证。Struts2的动作类可以通过JUnit进行测试,Spring的业务服务和DAO(数据访问对象)同样如此。 JUnit是Java中最广泛使用的单元测试框架。通过创建继承自JUnit...

    springmvc项目搭建并实现Junit单元测试

    在Java开发领域,Spring MVC是广泛...这个过程涵盖了Spring MVC的基本概念、项目结构、配置、Controller编写以及使用Spring Test进行单元测试的方法。理解并掌握这些知识,有助于开发高质量、易于维护的Java Web应用。

    springmvc mybatis测试工程

    1. 单元测试:针对SpringMVC的Controller和MyBatis的Mapper接口进行单元测试,确保每个方法的功能正确无误。JUnit和Mockito等工具可以帮助我们进行这些测试。 2. 集成测试:检查整个系统组件间的交互,包括...

    springMVC+mybatis整合及测试(亲测可运行)

    7. **测试**:编写JUnit测试类,模拟HTTP请求,测试Controller的处理逻辑是否正确,同时验证Mybatis的SQL执行结果是否符合预期。 在“SpringMVCMybatis”这个压缩包中,应包含上述所有配置文件、Mapper接口、XML...

    spring+springmvc+mybatis+maven+junit整合

    在集成开发环境中,JUnit测试通常与持续集成工具一起使用,以保证每次代码更改后都能进行自动测试。 在这个整合项目中,`index.jsp`可能是应用的主页面,展示给用户的第一界面。`WEB-INF`目录包含应用的配置文件,...

    springmvc hibernate 测试工程

    为了测试这个工程,开发者可能会使用JUnit进行单元测试,测试各个服务和DAO的功能是否正常。同时,可能还会利用Mockito等工具模拟依赖,以便在不触碰真实数据库的情况下进行测试。 总的来说,"springmvc hibernate ...

    spring+springMVC+mybatis+maven+junit+mysql

    【标题】"spring+springMVC+mybatis+maven+junit+mysql" 是一个常见的Java Web项目技术栈,它涵盖了从后端开发到数据库管理,再到自动化构建和测试的完整流程。下面将详细阐述这些技术及其在项目中的作用。 ...

    spring4+springMVC+Mybatis项目搭建以及测试demo

    在本文中,我们将深入探讨如何搭建一个基于Spring4、SpringMVC和Mybatis的项目,以及如何进行测试。这个项目组合通常被称为“SSM”框架,是Java Web开发中的主流选择,提供了强大的依赖注入、MVC架构和持久层管理...

    详解Spring MVC如何测试Controller(使用springmvc mock测试)

    这样做的好处是,我们可以精确地控制测试输入并验证输出,避免了外部因素对测试结果的影响。 **为什么使用Mock测试?** 使用Mock测试的主要原因在于简化测试环境和提高测试效率。例如,当我们测试Controller时,...

    SpringMVC+hibernate整合+测试类

    在单元测试方面,我们可以使用JUnit作为测试框架,结合Mockito对服务层进行模拟测试,避免在测试中真正访问数据库。对于SpringMVC的Controller,我们可以利用MockMvc进行模拟请求测试,检查Controller的响应是否符合...

    测试springmvc3

    在 "测试springmvc3" 的场景中,我们将关注 Spring MVC 3 版本的关键特性和测试策略。 Spring MVC 3 在前一版本的基础上引入了若干改进和新特性,以提升开发效率和性能。以下是一些关键知识点: 1. **注解驱动**:...

    maven+springMVC+mybatis+velocity+mysql+junit项目框架搭建

    开发者可以利用JUnit编写测试用例,确保代码的功能正确性,提高代码质量。在项目开发过程中,Junit起到了关键的测试保障作用,帮助尽早发现和修复潜在问题。 综上所述,这个项目框架结合了多种技术,实现了完整的...

    springmvc+maven+junit+jqueryUI

    5. 使用JUnit编写单元测试,对Service和DAO层的功能进行验证。 6. 设计View层,利用JSP或Thymeleaf等模板引擎,结合jQuery UI创建交互式的用户界面。 7. 配置Spring MVC的DispatcherServlet,处理请求转发和视图解析...

    SpringMVC+Hibernate+Junit4基本框架近乎0配置Jar包

    SpringMVC、Hibernate和JUnit4是Java开发中的三大重要工具,它们分别在不同的层面上助力于应用程序的构建和测试。本压缩包提供了这三者组合的基本框架所需的Jar包,几乎无需额外配置,大大简化了开发过程。 首先,...

    maven+springMVC+mybatis+junit整合过程

    整个整合过程中,Maven负责项目的构建和依赖管理,SpringMVC提供MVC架构,MyBatis用于ORM(对象关系映射),而Junit则帮助我们进行单元测试。这些技术的结合使得开发、测试和部署Web应用程序变得更加高效和便捷。

    eclipse_springmvc_maven_mybstis3_junit4

    3. `src/test/java`: 存放测试代码,使用JUnit4编写,对项目中的功能进行单元测试。 4. `pom.xml`: Maven项目的配置文件,定义了项目的依赖、版本和构建过程。 这个项目作为一个Web应用的起点,可以帮助开发者快速...

Global site tag (gtag.js) - Google Analytics