这是我参与更文挑战的第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”去掉的话,数据库就会正常插入了。
看了这么久,也不点赞么,怎么不会心疼心人呢。