【测试】Webflux的Junit单元测试

本年度公司框架将加入WebFlux作为Reactive交互技术(传统模式还会保留)。WebFlux是基于Netty,在交互上采用的是异步处理模式,这次加入Webflux是希望增强框架的交互多样性和容载能力。

Webflux的具体实现将不在这里细说,本次主要讲解一下通过Junit调用Webflux遇到的“坑”。

spring-boot-starter-webflux 和 spring-boot-starter-web 同时引入不生效的问题。

通过官网的说明不难发现
在这里插入图片描述
旧版Web包使用的是阻塞结构,而Webflux使用的是非阻塞结构。
实际上直接引用Webflux包就可以了,因为里面已经包含了spring-web的核心内容,对于原有的RESTful方法不会产生影响。
在这里插入图片描述
如果同时引入的情况下项目只会变回Web工程,官网解释如下:
在这里插入图片描述

No qualifying bean of type WebTestClient?

由于Webflux是异步的,我们不能直接使用MockMvc客户端访问它,这个时候需要换另一个客户端WebTestClient
在这里插入图片描述
通过@Autowired的注解方式就可以注入,不需要像MockMvc那样还需要创建builder了。
若直接启动后会抛出了一个错误

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cn.paohe.operate.OperateRestTest': Unsatisfied dependency expressed through field 'webClient'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.test.web.reactive.server.WebTestClient' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:587) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]

经过排查这个问题跟WebTestClient的配置有关,在单元测试类中还需要加入@AutoConfigureWebTestClient让其能够自动配置就可以了。

@WebAppConfiguration需要取消?

本以为“万事俱备只欠东风”但启动运行时还是发现错误。

 java.lang.IllegalStateException: @WebAppConfiguration should only be used with @SpringBootTest when @SpringBootTest is configured with a mock web environment. Please remove @WebAppConfiguration or reconfigure @SpringBootTest.

提示已经相当明显了,SpringBoot告诉你要不就干掉@SpringBootTest,要不干掉@WebAppConfiguration。由于@SpringBootTest是用来指向启动类的,所以只能够干掉@WebAppConfiguration了。

那究竟为什么要干掉@WebAppConfiguration呢?这个就要看回SpringBoot官网的那张图,我们现在要测试的是Webflux不是Web。很明显@WebAppConfiguration将这个单元测试标识成了Web应用这样就报错了。
在这里插入图片描述
此外,在@SpringBootTest中最好能够标上随机端口,如上图所示。这样的话在使用Junit做大规模高并发测试的时候就不会产生冲突了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kida 的技术小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值