亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

Feign 代碼

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

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

測(cè)試用例

@SpringBootTest
@Slf4j
class AFeignServiceTest {

    @Autowired
    private AFeignService aFeignService;

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

執(zhí)行測(cè)試用例,一定會(huì)出錯(cuò),缺少代理方法 在test中添加代理配置類(lèi)

@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)用原來(lái)方法
        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;
    }

}

添加切面配置類(lèi),這是用于測(cè)試用途的代碼,不能寫(xiě)在src/代碼上,而是使用ImportBeanDefinitionRegistrar,在測(cè)試中引用進(jìn)來(lái)。 ImportBeanDefinitionRegistrar: 是Spring提供接口,運(yùn)行開(kāi)發(fā)者添加自定義添加自己的配置類(lèi),Spring Boot組件擴(kuò)展就是通過(guò)這個(gè)接口來(lái)實(shí)現(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);
    }

}

在原來(lái)的單元測(cè)試引入代理配置就可以了

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

再次運(yùn)行測(cè)試用例,沒(méi)有異常,并且返回對(duì)象成功打印出來(lái)

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

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

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

相關(guān)文章

  • java中基本數(shù)據(jù)類(lèi)型與Object的關(guān)系說(shuō)明

    java中基本數(shù)據(jù)類(lèi)型與Object的關(guān)系說(shuō)明

    這篇文章主要介紹了java基本數(shù)據(jù)類(lèi)型與Object的關(guān)系說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot嵌入式Web容器原理與使用介紹

    SpringBoot嵌入式Web容器原理與使用介紹

    Web開(kāi)發(fā)的核心內(nèi)容主要包括內(nèi)嵌的Servlet容器和SpringMVCSpringBoot使用起來(lái)非常簡(jiǎn)潔,大部分配置都有SpringBoot自動(dòng)裝配,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • SpringBoot使用jsoup爬取HTML的方法

    SpringBoot使用jsoup爬取HTML的方法

    jsoup 是一款 Java 的 HTML 解析器,它提供了一套非常便利的 API,可通過(guò) DOM、CSS 通過(guò)類(lèi)似于 JQuery 的操作方法來(lái)取出和操作數(shù)據(jù),這篇文章主要介紹了SpringBoot使用jsoup爬取HTML,需要的朋友可以參考下
    2024-02-02
  • java中String、StringBuffer與StringBuilder的區(qū)別

    java中String、StringBuffer與StringBuilder的區(qū)別

    這篇文章主要介紹了java 中String和StringBuffer與StringBuilder的區(qū)別,在開(kāi)發(fā)過(guò)程中經(jīng)常會(huì)用到String這個(gè)類(lèi)進(jìn)行操作。需要的朋友可以收藏下,方便下次瀏覽觀看
    2021-12-12
  • JAVA把結(jié)果保留兩位小數(shù)的3種方法舉例

    JAVA把結(jié)果保留兩位小數(shù)的3種方法舉例

    在寫(xiě)程序的時(shí)候,有時(shí)候可能需要設(shè)置小數(shù)的位數(shù),所以下面這篇文章主要給大家介紹了關(guān)于JAVA把結(jié)果保留兩位小數(shù)的3種方法,文章通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • mybatis?@InsertProvider報(bào)錯(cuò)問(wèn)題及解決

    mybatis?@InsertProvider報(bào)錯(cuò)問(wèn)題及解決

    這篇文章主要介紹了mybatis?@InsertProvider報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Guava中這些Map技巧可以讓代碼量減少了50%

    Guava中這些Map技巧可以讓代碼量減少了50%

    guava提供了非常強(qiáng)大的操作,可以讓我們把java代碼寫(xiě)的很簡(jiǎn)潔,下面這篇文章主要給大家介紹了關(guān)于Guava中這些Map使用技巧可以讓代碼量減少了50%的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 淺談一下SpringBoot中的異步任務(wù)

    淺談一下SpringBoot中的異步任務(wù)

    這篇文章主要介紹了淺談一下SpringBoot中的異步任務(wù),SpringBoot 中的異步任務(wù)主要是指在 SpringBoot 中使用異步線程完成處理任務(wù),在 SpringBoot 中使用異步線程非常簡(jiǎn)單,只需要兩個(gè)注解就可以搞定,需要的朋友可以參考下
    2023-10-10
  • Java如何通過(guò)反射獲取私有構(gòu)造、私有對(duì)象、私有字段、私有方法

    Java如何通過(guò)反射獲取私有構(gòu)造、私有對(duì)象、私有字段、私有方法

    這篇文章主要介紹了Java如何通過(guò)反射獲取私有構(gòu)造、私有對(duì)象、私有字段、私有方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java?NIO通信基礎(chǔ)示例詳解

    Java?NIO通信基礎(chǔ)示例詳解

    這篇文章主要為大家介紹了Java?NIO通信基礎(chǔ)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評(píng)論