admin管理员组文章数量:1442418
JUnit4 测试类自动注入 logger 和被测 Service 的方法
背景
在 IntelliJ IDEA 中,通过快捷键可以快速生成 JUnit4 测试类,但是生成测试类以后,总是需要手动添加 logger 和被测 Service 的注入。虽然这是一个很小的「重复动作」,但程序员还是不能忍(其实已经忍了很多年了)。
需求
以给如下简单的 Service 生成测试类为例:
代码语言:javascript代码运行次数:0运行复制package com.test.data.user.service;
import com.testmon.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运行复制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运行复制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运行复制import static org.junit.Assert.*;
#parse("File Header.java")
public class ${NAME} {
${BODY}
}
基于我们的需求,将其修改为以下内容即可:
代码语言:javascript代码运行次数:0运行复制#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}
}
其中,${CLASS_NAME}
是被测试类的全限定名,${CamelCaseName}
是根据 ${CLASS_NAME}
生成的被测试类的驼峰命名。
至此,经过一点微小的努力,我们实现了一个小小的自动化,工作效率又提高了一点点,程序员又开心了一点点。
本文标签: JUnit4 测试类自动注入 logger 和被测 Service 的方法
版权声明:本文标题:JUnit4 测试类自动注入 logger 和被测 Service 的方法 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1748034573a2794956.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论