SpringBoot实战(02):整合jUnit测试框架

一、前言

开发项目单元测试必不可少,而 jUnit 也是 java 中非常优秀的测试框架,现在简单实战总结一下 SpringBoot 如何整合 jUnit 测试框架。

二、添加依赖

在 SpringBoot 中使用 jUnit 单元测试前,需要先添加如下 maven 依赖,其中 <scope>test</scope> 表示该依赖仅用于测试阶段。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
</dependency>

三、简单业务代码

为了测试需要,我们先创建一个简单的业务代码,方便我们后续测试使用。
服务接口类:

public interface UpmsUserService {

	String getName(Long userId);

    int count();
}

服务实现类:

@Service("upmsUserService")
public class UpmsUserServiceImpl implements UpmsUserService {

	@Override
	public String getName(Long userId) {
		return "test"
	}

    @Override
    public int count() {
        return 1;
    }
}

按照以上的逻辑,getName 方法返回的结果是“test”,count 方法返回的是 1,我们现在需要测试一下是否正确。

四、创建测试类

创建一个测试类很简单,测试类只需要在 src 地下的 test 中编写,一般来说,test 的目录结果应该和 main 的结果保持一致,这样便于以后做测试管理。
这里我们使用 IDEA 来快速创建一个单元测试。

  1. 打开需要测试的业务类,单击右键选择 Go To -> Test,或者使用快捷键 Ctrl+Shift+T.
    在这里插入图片描述

  2. 没有创建测试类时,点击 Create New Test。如果已经创建,直接点击跳转就可以了。
    在这里插入图片描述

  3. 填写测试类信息,这里简单说明一下

  • Testing libray: 选择测试依赖包。这里我们选择 jUnit 的版本。
  • Class name: 测试类名,测试类类名规则一般为:业务类类名+Test。
  • Superclass:继承的父类。
  • Destination package:类的包路径,这个包在 test 目录下,包路径一般与业务类目录结构相似(接口类无需,因为接口无需测试)
  • Generate:添加@Before 和@After 方法。
  • Member:勾选需要测试的方法。
    在这里插入图片描述 4.确认后,业务类的测试类就创建好了。需要在类名上添加两行注解。并在需要测试的方法中添加@Test 注解。
/**
 * SpringJUnit4ClassRunner.class:让 junit 与 spring 环境进行整合
 *
 * SpringBootTest(classes={App.class}) 的作用
 * 1,当前类为 springBoot 的测试类
 * 2,加载 SpringBoot 启动类。
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = {App.class})
public class UpmsUserServiceTest {

	//spring注入需要测试的类,无需我们自己创建
	@Autowired
    public UpmsUserService upmsUserService;

	@Test
	public String getName() {
		String name = upmsUserService.getName(1L);
		Assert.assertEquals("abc", name);
	}

	@Test
    public int count() {
        int resule = upmsUserService.count();
        Assert.assertEquals(1, resule);
    }
}

五、运行测试类

1.单个方法或类的测试

单个测试只需光标选中需要运行的方法,单击右键“Run xxxMember()”即可,运行测试类也是类似的方法:
在这里插入图片描述

在这里插入图片描述
当然,IDEA 做的更只能话,在测试类或方法的前面添加了一个运行图标,这个运行起来就更加方便了。
在这里插入图片描述

2.运行整个项目的测试方法

如果项目上线了,需要对真个项目运行一下所有的单元测试,那该怎么处理呢。这个提供两种方式。

2.1.使用 IDEA 运行整个项目的测试类

选择左边整个项目的根目录,单击右键运行“Run All Test”
在这里插入图片描述
运行结果如下:
在这里插入图片描述

2.2.使用 maven 命令运行整个项目的测试类

也可以直接使用 maven 命令来运行整个项目(前提是你已经安装了 maven),其实 IDEA 的本质也是如此,开发 cmd 窗口,调整到项目根目录下,执行如下指令:

mvn test

通过运行后,我们可以看到 maven 会提供一份测试报告。包含总测试方法数,失败总数,错误总数和跳过总数。
在这里插入图片描述
以上两种方法都很实用,IDEA 更方便、更快捷,适用于开发阶段,Maven 可以在不同平台运行,适用于测试阶段和项目预演阶段。

3. 数据库测试

在测试数据时,我们常常需要对数据库进行操作,特别是在做增删改操作的时候,但是我们有不希望这些数据污染数据,有没有办法能让操作数据的测试不提交事务呢?
可以实现的,只需要添加给测试类上添加 @Transactional 即可:

@Test
@Transaction
public int update() {
    UpmsUserDo uesr = new UpmsUserDo();
    user.setUserId(1L);
    user.setUserName("abc");
    user.setAge(20);
    int resule = upmsUserService.update(user);
    Assert.assertEquals(1, resule);
}

执行后我们发现,执行没有显示方法是测试通过的,但是数据库的数据不会被更新。

六、注意事项与规范

SpringBoot 中整合 jUnit 还是非常容易的,这里简单说一下测试时遇到的一些问题。

  1. 测试类和测试方法的访问权限必须是 public。不然运行时会报错。
  2. 测试类类名命名规范:测试类类名=被测试类类名+“Test”
  3. 测试方法名命名规范:测试方法名=被测试方法名测试方法名=被测试方法名+ “Test”
  4. 测试方法中不建议用人肉测试方法,即打印日志的方式来人眼观察是否结果正确,正确方式应该使用 Assert 等测试类专用方法。
  5. 测试案例不是一成不变的,会随着项目的进行不断更新。

好了,以上是个人的一些小小的经验总结,如果你觉的对你有帮助的话,可以关注我查看更多 SpringBoot 相关文章!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jie_ming514

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值