Bootstrap

单元测试

  • @RunWith(SpringJUnit4ClassRunner.class):标识为JUnit的运行环境;
  • @SpringBootTest:获取启动类、加载配置,确定装载Spring Boot;
  • @Test:声明需要测试的方法;//之前版本为test开头的方法
  • @BeforeClass:针对所有测试,只执行一次,且必须为static void;
  • @AfterClass:针对所有测试,只执行一次,且必须为static void;
  • @Before:每个测试方法前都会执行的方法;//setUp --之前版本
  • @After:每个测试方法前都会执行的方法;//tillDown --之前版本
  • @Ignore:忽略方法;

超时测试

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

@Test(timeout = 1000)

断言测试

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

策略:方法期望返回值先确定,在写参数验证,不可以反过来,这样单元测试就流于表面

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

数据库测试

在测试数据操作的时候,我们不想让测试污染数据库,也是可以实现的,只需要添加给测试类上添加“@Transactional”即可,这样既可以测试数据操作方法,又不会污染数据库了。

示例代码如下:

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

执行效果如下:

Spring Boot(十二)单元测试JUnit

我们可以看到Id有了,也测试通过了,说明数据是添加是正常的,但查看数据库发现数据里面是没有这条数据的。

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

 期待异常测试

@Test(expected = IllegalArgumentException.class)
public void testException(){
    System.out.println("没有出现异常");
}

上面的方法将无法通过

;