最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot利用Junit動態(tài)代理實現(xiàn)Mock方法

 更新時間:2024年04月09日 17:21:40   作者:神易峰  
說到Spring Boot 單元測試主要有兩個主流集成分別是Mockito,Junit,這個各有特點,在實際開發(fā)中,我想要的測試框架應(yīng)該是這個框架集成者,本文給大家介紹了SpringBoot利用Junit動態(tài)代理實現(xiàn)Mock方法,需要的朋友可以參考下

說到Spring Boot 單元測試主要有兩個主流集成分別是Mockito,Junit,這個各有特點,在實際開發(fā)中,我想要的測試框架應(yīng)該是這個框架集成者。要有Junit能夠運行某一個單元用例,完整的項目環(huán)境,又需要Mockito能對某一個依賴進行注入,指定返回值內(nèi)容??上嶋H中這兩個框架根本不能同時運行的。突然想到可以通過AOP的環(huán)繞通知來實現(xiàn)Mock注入功能,覆蓋某一個方法返回值。 現(xiàn)在有一個Feign接口AService,實際情況我們環(huán)境根本就沒有這個服務(wù),調(diào)用這個方法一定會報錯的。通過代理技術(shù)的環(huán)繞通知覆蓋返回值,能讓方法正常調(diào)用。具體代碼實現(xiàn)如下

Feign 代碼

@FeignClient(name = "application-a")
public interface AFeignService {

    @RequestMapping("/url/path/get")
    Result<Object> get();
}

測試用例

@SpringBootTest
@Slf4j
class AFeignServiceTest {

    @Autowired
    private AFeignService aFeignService;

    @Test
    void get() {
        Result<Object> result = aFeignService.get();
        log.info(JSONObject.toJSONString(result));
    }
}

執(zhí)行測試用例,一定會出錯,缺少代理方法 在test中添加代理配置類

@Aspect
@Slf4j
public class AspConfig {

    @Pointcut("execution(* com..AFeignService.get(..))")
    public void pointcue(){

    }

    @Around("pointcue()")
    public Object overrideReturnValue(ProceedingJoinPoint joinPoint) throws Throwable {
        log.info("AspConfig.overrideReturnValue execute .................");
        //joinPoint.proceed();  不調(diào)用原來方法
        ErpReturnDTO dto = new ErpReturnDTO();
        dto.setStatus(200);
        dto.setSuccess(true);
        dto.setMessage("success");
        dto.setData(new ArrayList<>());
        Result<ErpReturnDTO> result = Result.succeed(dto);
        return result;
    }

}

添加切面配置類,這是用于測試用途的代碼,不能寫在src/代碼上,而是使用ImportBeanDefinitionRegistrar,在測試中引用進來。 ImportBeanDefinitionRegistrar: 是Spring提供接口,運行開發(fā)者添加自定義添加自己的配置類,Spring Boot組件擴展就是通過這個接口來實現(xiàn)的。

public class TestAopImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        BeanDefinitionBuilder definitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(AspConfig.class);
        GenericBeanDefinition definition = (GenericBeanDefinition) definitionBuilder.getRawBeanDefinition();
        registry.registerBeanDefinition(AspConfig.class.getName(), definition);
    }

}

在原來的單元測試引入代理配置就可以了

@SpringBootTest
@Slf4j
@Import(TestAopImportBeanDefinitionRegistrar.class)
class AFeignServiceTest

再次運行測試用例,沒有異常,并且返回對象成功打印出來

{"code":0,"data":{"data":[],"message":"success","status":200,"subMessage":"success","success":true},"msg":"操作成功","success":true}

有這個代理配置,就可以在平常的開發(fā)中,對單元測試中的依賴進行代理覆蓋返回值,達到Mock某個方法的返回值效果了。

到此這篇關(guān)于SpringBoot利用Junit動態(tài)代理實現(xiàn)Mock方法的文章就介紹到這了,更多相關(guān)SpringBoot Junit Mock方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java超詳細講解WebMvcConfigurer攔截器

    Java超詳細講解WebMvcConfigurer攔截器

    這篇文章將用實例來和大家介紹一下WebMvcConfigurer攔截器。文中的示例代碼講解詳細,對我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下
    2022-06-06
  • SpringBoot?mybatis-plus使用json字段實戰(zhàn)指南

    SpringBoot?mybatis-plus使用json字段實戰(zhàn)指南

    在現(xiàn)代應(yīng)用開發(fā)中經(jīng)常會使用JSON格式存儲和傳輸數(shù)據(jù),為了便捷地處理數(shù)據(jù)庫中的JSON字段,MyBatis-Plus提供了強大的JSON處理器,這篇文章主要給大家介紹了關(guān)于SpringBoot?mybatis-plus使用json字段的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • java實現(xiàn)多人聊天室可視化

    java實現(xiàn)多人聊天室可視化

    這篇文章主要為大家詳細介紹了java實現(xiàn)多人聊天室可視化,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java管理對象方法總結(jié)

    Java管理對象方法總結(jié)

    在本篇文章中小編給大家分享了關(guān)于Java管理對象方法以及相關(guān)代碼知識點,需要的朋友們跟著學(xué)習(xí)下。
    2019-05-05
  • Spring框架學(xué)習(xí)之AOP詳解

    Spring框架學(xué)習(xí)之AOP詳解

    這篇文章主要介紹了Spring框架學(xué)習(xí)之AOP詳解,文中有非常詳細的代碼示例,對正在學(xué)習(xí)Spring框架的小伙伴們有一定的幫助,需要的朋友可以參考下
    2021-05-05
  • Java多線程synchronized同步方法詳解

    Java多線程synchronized同步方法詳解

    這篇文章主要介紹了Java多線程synchronized同步方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • 深入淺析SPI機制在JDK與Spring?Boot中的應(yīng)用

    深入淺析SPI機制在JDK與Spring?Boot中的應(yīng)用

    SPI是一種使軟件框架或庫更加模塊化、可擴展和可維護的有效方法。通過遵循“開閉原則”,?SPI?確保了系統(tǒng)的穩(wěn)定性和靈活性,從而滿足了不斷變化的業(yè)務(wù)需求,這篇文章主要介紹了SPI機制在JDK與Spring?Boot中的應(yīng)用,需要的朋友可以參考下
    2023-09-09
  • 詳解RSA加密算法的原理與Java實現(xiàn)

    詳解RSA加密算法的原理與Java實現(xiàn)

    這篇文章主要和大家分享非對稱加密中的一種算法,那就是 RSA 加密算法。本文介紹了RSA算法的原理與Java實現(xiàn),感興趣的小伙伴可以嘗試一下
    2022-10-10
  • 一篇文章帶你了解Maven的坐標概念以及依賴管理

    一篇文章帶你了解Maven的坐標概念以及依賴管理

    這篇文章主要為大家介紹了Maven的坐標概念以及依賴管理,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 淺談靜態(tài)變量、成員變量、局部變量三者的區(qū)別

    淺談靜態(tài)變量、成員變量、局部變量三者的區(qū)別

    下面小編就為大家?guī)硪黄獪\談靜態(tài)變量、成員變量、局部變量三者的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09

最新評論

宽甸| 乐至县| 四平市| 天峨县| 监利县| 瑞昌市| 宜黄县| 都江堰市| 襄垣县| 攀枝花市| 夏邑县| 定边县| 泌阳县| 三都| 清涧县| 南部县| 惠州市| 天水市| 广汉市| 观塘区| 古田县| 资阳市| 会宁县| 绥江县| 巴楚县| 华坪县| 仙居县| 青州市| 藁城市| 无棣县| 古田县| 青海省| 颍上县| 平昌县| 顺昌县| 玉树县| 濮阳县| 灵山县| 呈贡县| 陇西县| 迁西县|