Loading [MathJax]/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java|让 JUnit4 测试类自动注入 logger 和被测 Service

Java|让 JUnit4 测试类自动注入 logger 和被测 Service

作者头像
mzlogin
发布于 2024-09-26 01:38:15
发布于 2024-09-26 01:38:15
18800
代码可运行
举报
文章被收录于专栏:闷骚的程序员闷骚的程序员
运行总次数:0
代码可运行

本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。

背景

IntelliJ IDEA 中,通过快捷键可以快速生成 JUnit4 测试类,但是生成测试类以后,总是需要手动添加 logger 和被测 Service 的注入。虽然这是一个很小的「重复动作」,但程序员还是不能忍(其实已经忍了很多年了)。

需求

以给如下简单的 Service 生成测试类为例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.test.data.user.service;

import com.test.common.base.BaseService;
import com.test.data.user.entity.UserSource;

/**
 * @author mazhuang
 */
public interface UserSourceService extends BaseService<UserSource> {

    /**
     * 记录用户来源
     * @param userId -
     * @param threadId -
     */
    void recordUserSource(Long userId, Long threadId);
}

command + n 调出 Generate 菜单,然后选择 Test,配置测试类的名称、基类和包:

默认生成的测试类如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.test.data.user.service;

import static org.junit.Assert.*;

import com.test.BaseTests;
import org.junit.Test;

/**
 * @author mazhuang
 */
public class UserSourceServiceTest extends BaseTests {
    @Test
    public void recordUserSource() {
    }
}

然而在写测试用例的过程中,总是需要用到 logger 和 Service,所以期望中的测试类默认长这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.test.data.user.service;

import static org.junit.Assert.*;

import com.test.BaseTests;
import org.junit.Test;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * @author mazhuang
 */
@Slf4j
public class UserSourceServiceTest extends BaseTests {

    @Autowired
    private UserSourceService userSourceService;

    @Test
    public void recordUserSource() {
    }
}

方案与实现

经过一番 search,发现 IDEA 的 Preference - Editor - File and Code Templates 的 Code 里有一个 JUnit4 Test Class,可以自定义生成 JUnit4 测试类的模板。

这个模板原始内容是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import static org.junit.Assert.*;
#parse("File Header.java")
public class ${NAME} {
  ${BODY}
}

基于我们的需求,将其修改为以下内容即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#set( $LastDotIndex = $CLASS_NAME.lastIndexOf(".") + 1 )
#set( $CamelCaseName = "$CLASS_NAME.substring($LastDotIndex)" )
#set( $CamelCaseName = "$CamelCaseName.substring(0, 1).toLowerCase()$CamelCaseName.substring(1)")

import static org.junit.Assert.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
#parse("File Header.java")
@Slf4j
public class ${NAME} {

    @Autowired
    private ${CLASS_NAME} ${CamelCaseName};
  ${BODY}
}

其中,CLASSNAME {CamelCaseName} 是根据

至此,经过一点微小的努力,我们实现了一个小小的自动化,工作效率又提高了一点点,程序员又开心了一点点。

小结

察觉到重复动作,并消除——也许可以称之为「偷懒」,这是程序员的日常小乐趣,也是 人类进步的动力 吧。

文中完整脚本已上传至 GitHub,仓库地址:https://github.com/mzlogin/code-generator ,以后如果有更新,或者新的代码生成脚本,也会放在这个仓库里。

文档信息

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024/09/25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JUnit4 测试类自动注入 logger 和被测 Service 的方法
在 IntelliJ IDEA 中,通过快捷键可以快速生成 JUnit4 测试类,但是生成测试类以后,总是需要手动添加 logger 和被测 Service 的注入。虽然这是一个很小的「重复动作」,但程序员还是不能忍(其实已经忍了很多年了)。
Power
2025/04/02
1000
Idea 使用 Junit4 进行单元测试
Idea 默认使用 arquillian junit4 作为测试框架,我们将其更改为 Junit4。
希希里之海
2019/09/04
8.2K0
Idea 使用 Junit4 进行单元测试
JUnit4 简介
JUnit4是一个易学易用的Java单元测试框架,使用非常广泛。现阶段的最新版本号是4.12,JUnit5目前正在测试中,所以这里还是以JUnit4为准。
乐百川
2022/05/05
9340
告别加班/解放双手提高单测覆盖率之Java 自动生成单测代码神器推荐
很多公司对分支单测覆盖率会有一定的要求,比如 单测覆盖率要达到 60% 或者 80%才可以发布。
明明如月学长
2022/02/15
6.9K0
告别加班/解放双手提高单测覆盖率之Java 自动生成单测代码神器推荐
单元测试类检测调用是否正确
我这里写了个单元测试类,如下所示,逻辑很简单,调用OneConsumerServiceImpl.publish方法一百次,产生一百个事件,再检查OneConsumerServiceImpl记录的消费事件总数是不是等于一百: package com.bolingcavalry.service.impl; import com.bolingcavalry.service.LowLevelOperateService; import lombok.extern.slf4j.Slf4j; import org.j
用户8671053
2021/10/06
3010
在Eclipse中使用JUnit4进行单元测试
转自:http://tech.sina.com.cn/s/2010-01-18/14081218926.shtml
forrestlin
2022/04/02
8300
在Eclipse中使用JUnit4进行单元测试
Spring Boot - 用JUnit 5构建完美的Spring Boot测试套件
Spring Boot - Junit4 / Junit5 / Spring Boot / IDEA 关系梳理
小小工匠
2023/09/12
6.7K0
Spring Boot - 用JUnit 5构建完美的Spring Boot测试套件
Eclipse中使用JUnit4进行单元测试(整合篇)
我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的。但是,我们同时应该确保每一个函数都完全正确,因为如果我们今后如果对程序进行扩展,用到了某个函数的其他功能,而这个功能有bug的话,那绝对是一件非常郁闷的事情。所以说,每编写完一个函数之后,都应该对这个函数的方方面面进行测试,这样的测试我们称之为单元测试。传统的编程方式,进行单元测试是一件很麻烦的事情,你要重新写另外一个程序,在该程序中调用你需要测试的方法,并且仔细观察运行结果,看看是否有错。正因为如此麻烦,所以程序员们编写单元测试的热情不是很高。于是有一个牛人推出了单元测试包,大大简化了进行单元测试所要做的工作,这就是JUnit4。本文简要介绍一下在Eclipse3.2中使用JUnit4进行单元测试的方法。
流川枫
2018/09/12
2.8K0
Eclipse中使用JUnit4进行单元测试(整合篇)
Java单元测试框架(一)——JUnit4
由于squareRoot方法是一个死循环,为了保证测试用例不至于无限制等待,在@Test后使用(timeout=1000),意思是等待1000毫秒,如果1000毫秒内没有出结果,默认测试失败
顾翔
2020/08/28
6330
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
mzlogin
2024/09/25
3420
Java|在 IDEA 里自动生成 MyBatis 模板代码
Junit
​ Ant 是基于 Java 的开源构建工具。Eclipse 中已经集成了 Ant。
GeekLiHua
2025/01/21
1490
Junit
Junit测试类使用
ha_lydms
2023/08/10
2960
junit4整合PowerMockito进行单元测试
所以我们在单测中,往往会使用mock的方式对这些代码做一个数据的模拟,从而达到对代码进行测试的一个目的。
半月无霜
2023/10/18
1.4K0
junit4整合PowerMockito进行单元测试
【SpringBoot】Http请求统一异常(返回数据)处理与单元测试
这个ResultUtil中的方法,其实写在BaseController中也挺不错的
谙忆
2021/01/21
8490
【SpringBoot】Http请求统一异常(返回数据)处理与单元测试
JUnit5学习之一:基本操作
《JUnit5学习》系列旨在通过实战提升SpringBoot环境下的单元测试技能,一共八篇文章,链接如下:
程序员欣宸
2022/05/06
6180
JUnit5学习之一:基本操作
Junit 4 Tutorials(Junit 4 系列教程) 二、Junit4 注解
Junit4 注解提供了书写单元测试的基本功能。.本章将介绍@BeforeClass, @AfterClass,@Before, @After 和@Tes 这几个基本t注解。
亦山
2021/09/14
9770
java中使用junit测试
最初写代码只要功能走通就不管了,然后如果出了什么问题再去修改,这是因为没做测试的工作。测试其实很简单。 1.准备 当前使用idea编写代码,用maven构建工程,使用maven的test功能来进行批量测试。测试工具为junit。 2.编写功能代码 将主要的业务功能的代码完成。 1 public interface Sender { 2 public void send(); 3 } 4 public class MailSender implements Sender { 5 @O
Ryan-Miao
2018/03/13
1.3K0
Junit 4 Tutorials(Junit 4 教程) 五、测试套件
Junit 4允许通过使用测试套件类批量运行测试类 . 为一套测试类创建一个测试套件,要为测试类添加以下注解:
亦山
2021/09/14
6590
Junit 4 Tutorials(Junit 4 教程) 四、Junit4 参数化测试
Junit 4 参数化测试 允许通过变化范围的参数值来测试方法。参数擦测试可以通过以下简单的步骤实现:
亦山
2021/09/14
6900
spring4整合junit测试
一、加入依赖包 1.使用spring4的测试框架需要加入以下依赖包: JUnit 4 spring-Test (Spring框架中的test包) spring-aop(Spring框架中的AOP包,spring4整合junit测试需要依赖aop的包了) 使用maven,在基于spring的项目中添加如下依赖: <dependency> <groupId>junit</groupId> <artifactId>junit</artifac
秋白
2019/02/21
1.4K0
相关推荐
JUnit4 测试类自动注入 logger 和被测 Service 的方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档