Idea+JUnit+JUnitGenerator,生成自动测试类(可测试controller)

Idea+JUnit+JUnitGenerator,生成自动测试类(可测试controller)

1.安装JUnitGenerator插件

打开Settings窗口搜索junit,如图:

 

JUnitGenerator V2.0插件,可以帮助我们自动生成测试代码。

如果搜索junit没有JUnitGenerator V2.0时,如下图操作(下载添加):

JUnitGenerator V2.0插件模板配置:

输出路径(Output Path): ${SOURCEPATH}/../../test/java/${PACKAGE}/${FILENAME}

注:../表示返回上一级目录

JUnit3和JUnit4可以设置自己需要的模板(我JUnit3是生成Controller的模板,JUnit4是生成Service的模板)

我的JUnit3模板:

## 
#macro (cap $strIn)$strIn.valueOf($strIn.charAt(0)).toUpperCase()$strIn.substring(1)#end 
## Iterate through the list and generate testcase for every entry. 
#foreach ($entry in $entryList) 
#set( $testClass="${entry.className}Test") 
## 
package $entry.packageName; 

import org.junit.Test; 
import com.benxiang.main.myTest.BaseJunit;
import org.springframework.http.MediaType;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

/** 
* ${entry.className} Tester. 
* 
* @author <Authors LyinQi> 
* @since <pre>$today</pre> 
* @version 1.0 
*/ 
public class $testClass extends BaseJunit { 

#foreach($method in $entry.methodList) 
    /** 
    * Method: $method.signature 
    */ 
    @Test
    public void #cap(${method.name})() throws Exception { 
        String responseString = mockMvc.perform(
                get("/api/v1/")    
                        .contentType(MediaType.APPLICATION_FORM_URLENCODED) 
                        .param("os","2") 
                        .param("osv","1")
        ).andExpect(status().isOk())    
                .andDo(print())         
                .andReturn().getResponse().getContentAsString();   
        System.err.println(responseString);
    } 
#end 

} 
#end

我的JUnit4模板:

## 
#macro (cap $strIn)$strIn.valueOf($strIn.charAt(0)).toUpperCase()$strIn.substring(1)#end 
## Iterate through the list and generate testcase for every entry. 
#foreach ($entry in $entryList) 
#set( $testClass="${entry.className}Test") 
## 
package $entry.packageName; 

import com.benxiang.main.myTest.BaseJunit;
import org.junit.Test; 

/** 
* ${entry.className} Tester. 
* 
* @author <Authors LyinQi> 
* @since <pre>$today</pre> 
* @version 1.0 
*/ 
public class $testClass extends BaseJunit { 

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

} 
#end

 

 

2.快捷键设置(我的安装完插件快捷键无作用)

调用模板的方法(Alt+Insert)默认测试所有所有方法。若想要动态个性化生成,可以在所要测试的类页面上,使用该快捷操作Ctrl + Shift + T,如下图个性化设置:

注意:若该快捷键点击无反应,需要自己设置自动创建测试类的快捷键:

点击 file-> setting -> keymap 搜索:test

在该栏中修改成你想要快捷键,点击OK

3.单元测试父类

package com.benxiang.main;

import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;


/**
 * 基础测试类
 *
 * @author LyinQi
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = BenxiangApplication.class)
@WebAppConfiguration
//@Transactional //打开的话测试之后数据可自动回滚
public class BaseJunit {

    @Autowired
    WebApplicationContext webApplicationContext;

    protected MockMvc mockMvc;

    @Before
    public void setupMockMvc(){
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }

    @Before
    public void initDatabase(){
    }
}

4.生成的测试类示例

Controller示例

package com.benxiang.main.controller.v1; 

import org.junit.Test; 
import com.benxiang.main.myTest.BaseJunit;
import org.springframework.http.MediaType;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

/** 
* DealerController Tester. 
* 
* @author <Authors LyinQi> 
* @since <pre>12/01/2020</pre> 
* @version 1.0 
*/ 
public class DealerControllerTest extends BaseJunit { 

    /** 
    * Method: getVipUpData() 
    */ 
    @Test
    public void getVipUpData() throws Exception {
        String responseString = mockMvc.perform(
                get("/api/v1/dealer/getVipUpData")    //请求路径
                        .contentType(MediaType.APPLICATION_FORM_URLENCODED) //数据的格式
                        .param("os","2")     //请求参数
                        .param("osv","1")     //请求参数
        ).andExpect(status().isOk())    //状态码200
                .andDo(print())         //打印出请求和相应的内容
                .andReturn().getResponse().getContentAsString();   //将相应的数据转换为字符串
        System.err.println(responseString);
    }
    /** 
    * Method: getBuyCardData() 
    */ 
    @Test
    public void getBuyCardData() throws Exception {
        String responseString = mockMvc.perform(
                get("/api/v1/dealer/getBuyCardData")
                        .contentType(MediaType.APPLICATION_FORM_URLENCODED) 
                        .param("os","2") 
                        .param("osv","1")
                        .param("userId","111111")
        ).andExpect(status().isOk())
                .andDo(print())         
                .andReturn().getResponse().getContentAsString();   
        System.err.println(responseString);
    }

} 

Service示例

package com.benxiang.main.module.order.service.impl; 

import org.junit.Test; 
import com.benxiang.main.myTest.BaseJunit;

/** 
* DistributorOrderServiceImpl Tester. 
* 
* @author <Authors LyinQi> 
* @since <pre>12/02/2020</pre> 
* @version 1.0 
*/ 
public class DistributorOrderServiceImplTest extends BaseJunit { 

    /** 
    * Method: create(OrderCreateVo orderCreateVo) 
    */ 
    @Test
    public void Create() throws Exception { 
        //TODO: Test goes here... 
    } 
    /** 
    * Method: paymentSuccess(Order order, String payType) 
    */ 
    @Test
    public void PaymentSuccess() throws Exception { 
        //TODO: Test goes here... 
    } 

} 

 

 

 

Idea Controller 是一个控制器,负责处理与Idea模块相关的请求和逻辑。单元测试是一种测试方法,用于验证代码的功能是否正常。 对于 Idea Controller 的单元测试,我们需要验证以下几个方面的功能: 1. 路由功能:单元测试应该验证 Idea Controller 是否能够正确地接收和处理来自用户或其他模块的请求,并将请求转发到相应的方法。 2. 输入验证:应该验证 Idea Controller 是否能够正确地验证用户输入的数据,包括数据型、长度、格式等,并对不合法的输入进行正确的处理,如返回错误信息或进行修正。 3. 业务逻辑:应该验证 Idea Controller 是否能够正确地根据业务规则进行数据处理,如对数据库的读写操作、数据的处理和计算等,并确保逻辑的正确性和完整性。 4. 错误处理:应该验证 Idea Controller 是否能够正确地处理异常情况,如数据库连接失败、请求超时、权限不足等,并能够返回正确的错误信息。 在进行 Idea Controller 的单元测试时,可以使用单元测试框架,如JUnit或TestNG,并使用模拟对象或桩对象来模拟其他依赖的模块或服务,以便进行独立的测试。 通过进行单元测试,我们可以提前发现和修复代码中的错误和问题,确保功能的正确性和稳定性,提高代码的质量和可维护性。此外,单元测试也可以帮助开发人员更好地理解和使用 Idea Controller 的接口和功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值