51Testing软件测试论坛

标题: junit4 spring集成测试 [打印本页]

作者: 奇犽    时间: 2019-2-13 14:54
标题: junit4 spring集成测试

很多时候我看见小伙伴这样测试spring的service或者dao,每个类后面写个main,使用new方式加载spring配置文件,获取需要测试的实例,然后对实例进行测试。稍微好一点的在junit测试类里面new加载spring配置文件进行测试。

其实junit测试spring可以很方便的进行。这里会用到spring-test-xxx.jar,junit4的jar。

其中要注意的是:

  1. @RunWith(SpringJUnit4ClassRunner.class)
复制代码

1、如果spring配置文件applicationContext.xml在classpath路径下,即通常的src目录下,这样加载配置文件,用classpath前缀。

  1. @ContextConfiguration(locations = { "classpath:applicationContext.xml" })
复制代码

2、但是在web项目中,有些人喜欢把spring配置文件applicationContext.xml放在WEB-INF目录下,这里不是classpath目录。这种情况可以按如下方式配置:用file前缀,指定配置文件的绝对路径。貌似这种方式不是很友好。

  1. @ContextConfiguration(locations = { "file:F:\\workspace\\web-test\\src\\main\\resources\\"
  2.                 + "applicationContext.xml" })
复制代码

spring配置文件applicationContext.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.         xmlns:context="http://www.springframework.org/schema/context"
  4.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5.         xsi:schemaLocation="http://www.springframework.org/schema/beans
  6.         http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
  7.         http://www.springframework.org/schema/context
  8.         http://www.springframework.org/schema/context/spring-context-3.2.xsd  ">
  9.        
  10.         <context:component-scan base-package="com.wss.lsl.junit.demo" />

  11. </beans>
复制代码

待测试的service,就一个方法,求两个整数的和。

  1. package com.wss.lsl.junit.demo.service;

  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import org.springframework.stereotype.Service;

  5. @Service
  6. public class CalculateService {

  7.         private Logger logger = LoggerFactory.getLogger(getClass());

  8.         /**
  9.          * 计算:返回两个整数的和
  10.          *
  11.          * @param first
  12.          * @param second
  13.          * @return
  14.          */
  15.         public int sum(int first, int second) {

  16.                 logger.info("求和参数:first={}, second={}", first, second);

  17.                 return first + second;
  18.         }
  19. }
复制代码

测试基类,所有其他的测试类集成此类,从而无需再重复配置加载spring配置文件。

  1. package com.wss.lsl.junit.demo;

  2. import org.junit.Test;
  3. import org.junit.runner.RunWith;
  4. import org.springframework.test.context.ContextConfiguration;
  5. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

  6. @RunWith(SpringJUnit4ClassRunner.class)
  7. @ContextConfiguration(locations = { "classpath:applicationContext.xml" })
  8. public class BaseTest {

  9.         @Test
  10.         public void _() {
  11.         }
  12. }
复制代码

测试类如下,我们可以很方便把要测试的实例@Autowired进来,这样优雅多了。

  1. package com.wss.lsl.junit.demo.service;

  2. import static org.junit.Assert.*;

  3. import org.junit.Test;
  4. import org.springframework.beans.factory.annotation.Autowired;

  5. import com.wss.lsl.junit.demo.BaseTest;

  6. public class CalculateServiceTest extends BaseTest {

  7.         @Autowired
  8.         private CalculateService calculateService;

  9.         @Test
  10.         public void testSum() {
  11.                 int expected = 5, first = 3, second = 2;
  12.                 int real = calculateService.sum(first, second);
  13.                
  14.                 // 验证
  15.                 assertEquals(expected, real);
  16.         }

  17. }
复制代码








欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2