单元测试JUnit使用介绍

272 阅读2分钟

这是我参与更文挑战的第15天,活动详情查看: 更文挑战 作为开发,日常编程中怎么能少了自测环节呢,今天介绍一下单元测试中的战斗机——JUnit框架的简单应用咯。

一、介绍

JUnit是一个Java语言的单元测试框架。常用于开发阶段做白盒测试、回归测试和单元测试。

JUnit GitHub地址:github.com/junit-team

下面简单介绍一下在SpringBoot框架中JUnit的应用。

  • org.springframework.boot  2.1.4.RELEASE
    
  • junit:4.12
    
  • Gradle

  • IDEA 2018.2

二、检测JUnit依赖

Spring Boot项目默认已经加入了JUnit框架支持,可在build.gradle中查看:

dependencies {

compile "junit:junit:4.12"

}
三、基础使用

简单的测试代码如下:

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class OneTest {    
@Test    
public void doTest() 
{        
int num = new Integer(1);        
Assert.assertEquals(num, 1);    
} 
  }

3.1 注解说明

注解列表

  • @RunWith:标识为JUnit的运行环境,让 JUnit 运行 Spring 的测试环境,获得 Spring 环境的上下文的支持
  • @SpringBootTest:获取启动类,加载配置,确定装载 Spring 程序的装载方法,它回去寻找主配置启动类(被 @SpringBootApplication 注解的)
  • @Test:声明需要测试的方法;
  • @BeforeClass:针对所有测试,只执行一次,且必须为static void;
  • @AfterClass:针对所有测试,只执行一次,且必须为static void;
  • @Before:每个测试方法前都会执行的方法;
  • @After:每个测试方法前都会执行的方法;
  • @Ignore:忽略方法,启动时不执行;

3.2超时测试

代码如下,给Test设置timeout属性即可,时间单位为毫秒:

@Test(timeout = 1000)

3.3断言测试

断言测试也就是期望值测试,是单元测试的核心也就是决定测试结果的表达式,Assert对象中的断言方法:

  • Assert.assertEquals 对比两个值相等
  • Assert.assertNotEquals 对比两个值不相等
  • Assert.assertSame 对比两个对象的引用相等
  • Assert.assertArrayEquals 对比两个数组相等
  • Assert.assertTrue 验证返回是否为真
  • Assert.assertFlase 验证返回是否为假
  • Assert.assertNull 验证null
  • Assert.assertNotNull 验证非null

代码示例如下:

@Test 
public void doTest() 
{    
String[] string1 = {"1", "2"};    
String[] string2 = string1;    
String[] string3 = {"1", "2"};     
Assert.assertEquals(string1, string2);    
Assert.assertEquals(string2, string3);    
Assert.assertSame(string1, string2);    
Assert.assertSame(string2, string3); //验证不通过,string2、string3指向的引用不同 
}

3.4数据库测试

在测试数据插入、编辑等操作时,不想要被修改的数据落库,也是有办法的。只需要添加给测试类上添加“@Transactional”,这样数据就不会保留,不会污染数据库了。

示例代码如下:

@Test 
@Transactional 
public void saveTest() 
{    
User user = new User();    
user.setName("Tom");    
user.setAge(20);    
user.setPwd("666666");    
userRepository.save(user);    
System.out.println("userId:" + user.getId());    
Assert.assertTrue(user.getId()>0); 
}

执行结果中id有了,测试通过,说明数据是添加是正常的,但查看数据库发现数据里面是没有这条数据的。

如果把“@Transactional”去掉的话,数据库就会正常插入了。

看了这么久,也不点赞么,怎么不会心疼心人呢。