还在手动写单元测试?

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

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

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)

这里可自行改造为


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

流程

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

目录
相关文章
|
6月前
|
测试技术
|
1月前
|
安全 Java 测试技术
单元测试一篇汇总
本文详细介绍了软件开发中的单元测试,包括其重要性和好处。单元测试主要用于确保程序模块代码的正确性,常使用的测试框架有JUnit和TestNG。文章重点讲解了JUnit框架,包括其注解、断言方法及JUnit 3.x和4.x的区别。此外,还列举了八大常用的单元测试框架,如Arquillian、JTest、The Grinder、TestNG、JUnit、JWalk、Mockito和PowerMock,帮助读者更好地理解和应用单元测试。
单元测试一篇汇总
|
5月前
|
测试技术 C# 容器
在C#中进行单元测试 _
前言 时隔多个月,终于抽空学习了点新知识,那么这次来记录一下C#怎么进行单元测试,单元测试是做什么的。 我相信大部分刚毕业的都很疑惑单元测试是干什么的?在小厂实习了6个月后,我发现每天除了写CRUD就是写CRUD,几乎用不到单元测试。写完一个功能直接上手去测,当然这只是我个人感受,仅供参考。 然后当我还在抱怨测试好烦的时候,大佬跟我说为什么不用单元测试和集成测试,我这也是有苦说不出。要知道光学会理论知识,没有实践作为基础,都是扯淡,入职这么久还真没用过单元测试,吓得我赶紧去找资料学习。 那么也是通过观看B站某位Up主的视频,然后有点想法写下这篇文章,虽然up主的主题是探究接口的作用和意义,但是
|
Java 测试技术
单元测试的正确姿势
软件测试是软件质量保证的关键步骤。越早发现软件中存在的问题,修复问题的成本就越低,软件质量也就越高,软件发布后的维护费用越低。为了能更好的保障软件质量,制定统一的系统自测指南,形成统一的流程达到此目标。
370 0
单元测试的正确姿势
|
Java 中间件 测试技术
单元测试都不做,怪不得你没有女朋友
单元测试都不做,怪不得你没有女朋友
单元测试都不做,怪不得你没有女朋友
|
测试技术 C++ 编译器
|
SQL 测试技术 数据库
什么是单元测试?为什么要做?
什么是UT? UT(Unit Test)即单元测试
339 0
什么是单元测试?为什么要做?
|
数据可视化 测试技术 Go
使用 Gomock 进行单元测试
在实际项目中,需要进行单元测试的时候。却往往发现有一大堆依赖项。这时候就是 Gomock 大显身手的时候了 Gomock 是 Go 语言的一个 mock 框架,官方的那种 安装 1$ go get -u github.
4227 0