Junit单元测试

JUnit简介

JUnit 是用于编写和运行可重复的自动化测试的开源测试框架,这样可以保证我们的代码按预期工作。JUnit 可广泛用于工业和作为支架(从命令行)或IDE(如 IDEA)内单独的 Java 程序。主要是用于后台的方法测试,避免重复的启动项目。

断言测试预期结果。
测试功能共享通用的测试数据。
测试套件轻松地组织和运行测试。
图形和文本测试运行。


JUnit 用于测试:

整个对象
对象的一部分 - 交互的方法或一些方法
几个对象之间的互动(交互)


JUnit 特点

JUnit 是用于编写和运行测试的开源框架。
提供了注释,以确定测试方法。
提供断言测试预期结果。
提供了测试运行的运行测试。
JUnit 测试让您可以更快地编写代码,提高质量
JUnit 是优雅简洁。它是不那么复杂以及不需要花费太多的时间。
JUnit 测试可以自动运行,检查自己的结果,并提供即时反馈。没有必要通过测试结果报告来手动梳理。
JUnit 测试可以组织成测试套件包含测试案例,甚至其他测试套件。
Junit 显示测试进度的,如果测试是没有问题条形是绿色的,测试失败则会变成红色。


JUnit 注解

@BeforeClass 全局只会执行一次,而且是第一个运行
@Before 在测试方法运行之前运行
@Test 测试方法
@After 在测试方法运行之后允许
@AfterClass 全局只会执行一次,而且是最后一个运行
@Ignore 忽略此方法
@AfterClass和BeforeClass即是为了满足测试中,那些体积非常大,但只要一次初始化的代码块!
@RunWith:修改测试运行器
@Rollback(true):事务回滚,默认true

测试方法必须是静态

注意:编写测试类的原则:

①测试方法上必须使用@Test进行修饰
②测试方法必须使用public void 进行修饰,不能带任何的参数
③新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开
④测试类所在的包名应该和被测试类所在的包名保持一致
⑤测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
⑥测试类使用Test作为类名的后缀(不是必须)
⑦测试方法使用test作为方法名的前缀(不是必须)

测试套件的使用@RunWith

测试套件就是将几个测试类放在一个入口文件中,这些类可以一起执行。这里就需要使用到@RunWith注解来修改测试运行器。

新建一个入口类SuiteTest,该类不能包含其它方法。更改测试运行器为Suite.class,然后将要一起执行的类作为数组传入到Suite.SuiteClasses()中。

junit 单元测试事务会自动回滚。通过@Rollback(true)注解来实现,默认是true,事务会回滚,可以不写。false时事务不会回滚,数据会写到数据库中。

package com.xiaolyuh.service;

import java.util.Date;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;

import com.alibaba.fastjson.JSON;
import com.xiaolyuh.entity.RewardCouponDetail;
import com.xiaolyuh.mapper.RewardCouponDetailMapper;

@RunWith(SpringRunner.class)
@SpringBootTest
public class RewardCouponDetailServiceTest{

private static final Logger logger = LoggerFactory.getLogger(RewardCouponDetailServiceTest.class);

@Autowired
private RewardCouponDetailMapper rewardCouponDetailMapper;


  @Test
  @Transactional
  @Rollback(true)// 事务自动回滚,默认是true。可以不写
  public void TestCustomer(){
    RewardCouponDetail rewardCouponDetail = new RewardCouponDetail();
    rewardCouponDetail.setRewardInfoId(1L);
    rewardCouponDetail.setCouponId("1");
    rewardCouponDetail.setCouponDetailId(1L);
    rewardCouponDetail.setCreateTime(new Date());
    rewardCouponDetailMapper.insert(rewardCouponDetail);
    logger.info(JSON.toJSONString(rewardCouponDetail));
    Assert.assertNotNull(rewardCouponDetail.getId());
  }

}

 

 
posted @ 2019-11-18 17:51  别动我的猫  阅读(429)  评论(0编辑  收藏  举报