Spring 单元测试(Junit)

简介: Spring 单元测试(Junit)


  • 单元测试(Unit Test),是一段自动化的代码,用来调动被测试的方法,而后验证基于该方法或类的逻辑行为的一些假设。单元测试几乎总是用单元测试框架来写的。它写起来很顺手,运行起来不费时。它是全自动的、可信赖的、可读性强的和可维护的。
  • 和数据库相关的单元测试,可以设定自动回滚机制,不给数据库造成脏数据。或者对单元测试产生的数据有明确的前后缀标识。

在Spring的框架下,单元测试方法。

  1. 手动加载Spring的配置文件,并启动Spring容器
  2. 使用Spring中对Junit框架的整合功能

前提:

除了Junit4和Spring的jar包,还需要spring-test.jar

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>3.1.1.RELEASE</version>
</dependency>

方法一:

  1. 注解加载配置文件
private AreaService service;
protected ApplicationContext context;
@Before
public void init(){
  //context = new FileSystemXmlApplicationContext( new String[]{"classpath:applicationContext.xml" ,"classpath:mybatis-config.xml"});
  context = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
  service = (AreaService) context.getBean("areaService");
}
@Test
public void Test(){
  service.query();
}
  1. 静态代码块加载配置文件
private AreaService service;
//静态代码块加载
static{
  //context = new FileSystemXmlApplicationContext("applicationContext.xml");
  //context = new ClassPathXmlApplicationContext(new String[]{"classpath:applicationContext.xml","classpath:/spring/application*.xml"});
  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  service = (AreaService) context.getBean("areaService");
}
//main方法执行测试
@SuppressWarnings("resource")
public static void main(String[] args) {
    try {
    service.do();
  } catch (BizException e){
    e.printStackTrace();
  }
}
  1. main函数中执行spring的代码
    脱离Tomcat容器在单独的java application的main函数中初始化spring
public static void main(String[] args){
  //手动加载spring的配置文件,并启动spring容器
  /*GenericXmlApplicationContext context = new GenericXmlApplicationContext();
  context.setValidating(false);
  context.load("classpath*:applicationContext*.xml");
  context.refresh();*/
  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  //context.start();
  ReadDao fqa = (ReadDao) context.getBean("readDao");
  fqa.do();
}

方法二: 全注解

@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration需要配上spring的配置文件,这样就可以在测试类中使用注解简单的注入需要的bean了。简单高效。
@ContextConfiguration({"classpath:applicationContext.xml"})
public class ReadDaoImplTest{
  @Autowired
  private AreaService areaService;
  @Resource
  private ReadDao readDao;
  @Test
  public void test(){
    areaService.query();
  }
  @Test
  public void getListTest(){
    List<Client> clientList = readDao.getList("client.test",null);    
    for(Client c:clientList){
      System.out.println(c.getVersionNum());
      try {
        // 断言:判断z==6,
        assertEquals(6, z);
        //断言:判断z<3
        assertTrue(z<3);
      } catch (BizException e) {
        e.printStackTrace();
      }
    }
  }
}

解释下用到的注解:

@RunWith:用于指定junit运行环境

@ContextConfiguration:用于指定spring配置环境

@TransactionConfiguration:用于配置事务

@Transactional表示所有类下所有方法都使用事务


相关文章
|
2月前
|
IDE Java 测试技术
Junit 单元测试
JUnit是Java常用的单元测试框架,简化了测试用例的编写和执行。其特点包括简单注解、自动化测试、可扩展性、灵活性及与IDE的集成。使用方法涉及创建测试类、利用注解如@Test、@BeforeEach等管理测试生命周期,以及使用各种断言方法验证结果。此外,JUnit支持参数化测试以覆盖更多输入组合,并能与Maven、Gradle等构建工具集成,提升测试效率和项目管理。
41 1
|
2月前
|
Java 测试技术 Spring
Spring Boot 基于 JUnit 5 实现单元测试
Spring Boot 基于 JUnit 5 实现单元测试
27 0
|
2月前
|
Java Spring
使用JDBCTemplate实现与Spring结合,方法公用 ——测试(EmpDaoImplTest)
使用JDBCTemplate实现与Spring结合,方法公用 ——测试(EmpDaoImplTest)
9 0
|
4月前
|
消息中间件 Java 测试技术
Spring Cloud Alibaba环境问题之测试环境失败如何解决
Spring Cloud Alibaba提供了一套在Spring Cloud框架基础上构建的微服务解决方案,旨在简化分布式系统的开发和管理;本合集将探讨Spring Cloud Alibaba在实际应用中的部署和使用技巧,以及该框架常见问题的诊断方法和解决步骤。
|
21天前
|
Java 测试技术 程序员
junit单元测试
junit单元测试
|
2月前
|
Java Spring
使用spring实现邮件的发送(含测试,源码,注释)
使用spring实现邮件的发送(含测试,源码,注释)
7 0
|
3月前
|
运维 Java 测试技术
spring 单元测试 Junit
spring 单元测试 Junit
43 2
|
22天前
|
Java 测试技术
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
21 0
|
Java 测试技术
Java 中的单元测试和集成测试策略
【4月更文挑战第19天】本文探讨了Java开发中的单元测试和集成测试。单元测试专注于单一类或方法的功能验证,使用测试框架如JUnit,强调独立性、高覆盖率和及时更新测试用例。集成测试则验证模块间交互,通过逐步集成或模拟对象来检测系统整体功能。两者相辅相成,确保软件质量和降低修复成本。
|
18天前
|
缓存 自动驾驶 测试技术
如何进行有效的Apollo测试:单元测试和集成测试指南
如何进行有效的Apollo测试:单元测试和集成测试指南
46 13