美文网首页
spring集成测试环境的搭建

spring集成测试环境的搭建

作者: dancer4code | 来源:发表于2019-09-28 21:53 被阅读0次

1.加入依赖包

使用Spring的测试框架需要加入以下依赖包:

  • JUnit 4 (官方下载:http://www.junit.org/

  • Spring Test (Spring框架中的test包)

  • Spring 相关其他依赖包(不再赘述了,就是context等包)

2. 创建测试源目录和包

创建一个和src下面与main同级创建test目录(测试目录),基本上大的框架(像spring的测试文件就是这样的,这已经是默认的了)。

3. 创建测试类

创建一个测试用的类,推荐名称为 “被测试类名称 + Test”。 创建测试类通常的两种方式:

  1. 根据需求继承必须的类

  2. 根据需求加上必须的注解

第一种方式:测试类应该继承与 AbstractJUnit4SpringContextTests 或 AbstractTransactionalJUnit4SpringContextTests

  • AbstractJUnit4springcontextTests (测试中不涉及事物)

  • AbstractTransactionalJUnit4SpringContextTests (测试类中,需要用到事务管理)(比如要在测试结果出来之后回滚测试内容)

第二种方式:使用注解

  • AbstractJUnit4springcontextTests可以用@RunWith(SpringJUnit4ClassRunner.class)来实现同样的功能

  • AbstractTransactionalJUnit4SpringContextTests 可以用@RunWith(SpringJUnit4ClassRunner.class)+@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)来实现同样的功能

4. 通过JUnit 4 执行或maven自动执行

  • Junit:右键方法名,选择则“Run As”→“JUnit Test”即可

  • maven:默认自动回执行测试类,如果想要跳过测试可以添加如下命令:-Dmaven.test.skip=true

5.测试代码解释(测试Controller层)

code

@Transactional//每次都开启一个事务
@WebAppConfiguration//测试环境使用,用来表示测试环境使用的ApplicationContext将是WebApplicationContext类型的;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:spring-*.xml"})
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class BaseSpringJUnit {
    //执行@Test标注的方法之前都执行这个方法
    @Before
    public void setUp() throws Exception {
        //to doing somthing 
    }
    //执行@Test标注的方法之之后都执行这个方法
    @After
    public void tearDown() throws Exception {
        //to doing somthing
    }
    //测试方法
    @Test
    public void testPrint(){
        //to doing somthing
    }
}

@Transactional:每次都开启一个事务

@WebAppConfiguration:测试环境使用,用来表示测试环境使用的ApplicationContext将是WebApplicationContext类型的;

@ContextConfiguration(locations = {"classpath:spring-.xml"}):Spring整合JUnit4测试时,使用注解引入多个配置文件

@RunWith(SpringJUnit4ClassRunner.class)和@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)上面已经过

其中:

mockMvc.perform(post("/a/pro/unit/list").param("name", "s")).andExpect(MockMvcResultMatchers.view().name("modules/pro/unitList")) 
.andExpect(MockMvcResultMatchers.model().attributeExists("page")) 
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value("10000")) 
.andDo(MockMvcResultHandlers.print()) 
.andReturn();

其中使用MockMvcResultMatchers.jsonPath("$.code").value("10000"),需要导入jar包

pom.xml配置需要加上

 <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <version>0.8.1</version>
            <scope>test</scope>
        </dependency>
      <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path-assert</artifactId>
            <version>0.8.1</version>
            <scope>test</scope>
    </dependency>

最后整个过程:

  • 1、mockMvc.perform执行一个请求;

  • 2、MockMvcRequestBuilders.get("/user/1")构造一个请求

  • 3、ResultActions.andExpect添加执行完成后的断言

  • 4、ResultActions.andDo添加一个结果处理器,表示要对结果做点什么事情,比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息。

  • 5、ResultActions.andReturn表示执行完成后返回相应的结果。

相关文章

网友评论

      本文标题:spring集成测试环境的搭建

      本文链接:https://www.haomeiwen.com/subject/tjcluctx.html