还在手动写单元测试?

简介: 还在手动写单元测试?

欢迎点击头像进入主页查看更多内容....

JUnitGenerator安装

在Idea市场里安装JUnitGenerator插件如图,重启后生效
流程

设置生成路径及模板

Output Path: ${SOURCEPATH}/..//../test/java/${PACKAGE}/${FILENAME}
注:根据实际项目结构调整,设置为默认模板,另需要在Project Structure-->Modules中设置Test文件目录,可改造为自启动,随容器启动,
流程

设置Junit4 生成模板

支持 CommonResponse 或 Wrapper

#macro (cap $strIn)$strIn.valueOf($strIn.charAt(0)).toUpperCase()$strIn.substring(1)#end 
#foreach ($entry in $entryList) 
#set( $testClass="${entry.className}Test") 
package $entry.packageName; 
import java.util.*;
import org.junit.Test; 
import org.junit.Before; 
import org.junit.After; 
import org.springframework.http.ResponseEntity;
/**
 * BSF+Junit4
 * @Creator zhaokk
 * @CreateDate ${Date}
 * @DESC
 */
 @SuppressWarnings("all")
public class $testClass { 
     public final String ipAndPort="localhost:8080/";
    
    public final String token="login-token";
    
    
    public final String extend = "extend";

  
    private static HttpHeaders requestHeaders;

    @Before
    public void before() throws Exception {
        requestHeaders = new HttpHeaders();
        requestHeaders.add("token", token);
        requestHeaders.add("", "");
        
        JunitUtils.setRequestHeaders(requestHeaders);
    }

    @After
    public void after() throws Exception {
    }

#foreach($method in $entry.methodList) 
    /** 
    * 
    * Method: $method.signature 
    * 
    */ 
    @Test
    public void test#cap(${method.name})() throws Exception { 
        //Make request
        TestEntity testEntity=JunitUtils.checkRequest(ipAndPort,token);

        //Show Controller & Mehtod
        //FIXME new $entry.packageName.${entry.className}().${method.name}();
        
        //Model 1 (Parameter is url)
        //Map<String,String> objectRequest=new HashMap();
        //objectRequest.put("{id}","1000000157729");
        //testEntity.setRequestObj(objectRequest);

        //Model 2 (Parameter is Object)
        //UserLoginReq objectRequest = new UserLoginReq();//JSON.parseObject("jsonString",UserLoginReq.class)
        //objectRequest.setUsername("18311140968");
        //objectRequest.setPassword("aa123456");
        //testEntity.setRequestObj(objectRequest);
        
        //Model 3 (Parameter is url & Object)
        //Map<String,String> urlMap=new HashMap();
        //urlMap.put("{pageNo}","1");
        //urlMap.put("{pageSize}","10");
    //UserLoginReq objectRequest = new UserLoginReq();//JSON.parseObject("jsonString",UserLoginReq.class)
        //objectRequest.setUsername("18311140968");
        //objectRequest.setPassword("aa123456");
        //testEntity.setRequestObj(objectRequest);
        
        //model 1  and model 2 (ResponseEntity)
        ResponseEntity<CommonResponse> responseResponseEntity=JunitUtils.getResponseEntity(testEntity);
        
    //model 3 (ResponseEntity)
        //ResponseEntity<CommonResponse> responseResponseEntity=JunitUtils.getResponseEntity(urlMap,testEntity);

        //ResponseEntity To Object
        //CommonResponse<UserResp> response = responseResponseEntity.getBody();
        
        //Check CommonResponse code is 200000
        JunitUtils.checkResponse(responseResponseEntity.getBody());
    } 

#end 

#foreach($method in $entry.privateMethodList) 
/** 
* 
* Method: $method.signature 
* 
*/ 
@Test
public void test#cap(${method.name})() throws Exception { 
//TODO: Test goes here... 
#foreach($string in $method.reflectionCode) 
$string 
#end 
} 

#end 
} 
#end

代码块1:根据ipAndPort和token 拼装基础的URL和请求头
代码块2:工具块,方便快速跳转到本方法的源头
代码块3:模式1参数封装,一般用于GET 和DELETE 请求,纯URL
代码块4:模式2参数封装,一般用于POST和PUT 请求,纯对象。支持Json字符串,如下:
         UpdateUserByPKReq objectRequest = JunitUtils.jsonToObject("{\"name\":\"接口测试-勿删\",\"userNumber\":\"1573195928331\"",UpdateUserByPKReq.class);
          
代码块5:模式1和模式2的组合,拼装URL+对象
代码块6:适用于模式1和模式2,进行具体的请求并获得响应结果
代码块7:适用于模式3,进行具体的请求并获得响应结果
代码块8:检查响应结果,默认200000为成功,如果非200000失败。如有多个状态码均为成功,可以增加成功状态码进行入参,
         如下:JunitUtils.checkResponse(responseResponseEntity.getBody(),600220)
AI 代码解读

这里可自行改造为


/**
 * @author zhaokk
 * @create ${Date}
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = com.xxx.class)
@Slf4j
workspace.xml中加入
<component name="PropertiesComponent">
    <property name="dynamic.classpath" value="true" />
<!--  -->
AI 代码解读

流程

不知道大家有没有用有道云笔记的没有,经常性的新打开的笔记会在首行,但除了阅读之外,应该在最后一行继续编辑,所有大多情况下需要鼠标滑动到行尾,搜索过很多方法,不如Ctrl+A,然后→右箭头好用。mark

目录
打赏
0
0
0
0
467
分享
相关文章
为什么要单元测试
单元测试是软件开发中的重要环节,旨在验证程序模块的正确性。相比传统依赖人工检测的方式,自动化单元测试能显著提升效率与质量。在现代软件工程中,单元测试占据测试金字塔80%的基础地位,有助于快速定位问题、优化代码设计并提高整体研发效率。然而,忽视单元测试可能导致“冰激凌筒”或“沙漏”等反面模式,使系统难以维护。优秀的单元测试不仅保障代码质量,还能增强团队协作与持续交付能力,是构建高质量软件不可或缺的一部分。
单元测试一篇汇总
本文详细介绍了软件开发中的单元测试,包括其重要性和好处。单元测试主要用于确保程序模块代码的正确性,常使用的测试框架有JUnit和TestNG。文章重点讲解了JUnit框架,包括其注解、断言方法及JUnit 3.x和4.x的区别。此外,还列举了八大常用的单元测试框架,如Arquillian、JTest、The Grinder、TestNG、JUnit、JWalk、Mockito和PowerMock,帮助读者更好地理解和应用单元测试。
单元测试一篇汇总
单元测试的正确姿势
软件测试是软件质量保证的关键步骤。越早发现软件中存在的问题,修复问题的成本就越低,软件质量也就越高,软件发布后的维护费用越低。为了能更好的保障软件质量,制定统一的系统自测指南,形成统一的流程达到此目标。
406 0
单元测试的正确姿势
什么是单元测试?为什么要做?
什么是UT? UT(Unit Test)即单元测试
408 0
什么是单元测试?为什么要做?
使用 Gomock 进行单元测试
在实际项目中,需要进行单元测试的时候。却往往发现有一大堆依赖项。这时候就是 Gomock 大显身手的时候了 Gomock 是 Go 语言的一个 mock 框架,官方的那种 安装 1$ go get -u github.
4259 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等