spring-boot - 在 Spring 5 中获取 HTTP 404 Content Not Found 错误,WebTestClient
问题描述
我正在使用 WebTestClient 编写 JUnit 测试来测试服务实现类(不是控制器类),但我不断收到以下错误:-
*** 但是是:<404>
POST /authorizationserver/oauth/token WebTestClient-Request-Id: [1] Tenant-Id: [4370be48-6605-41da-89c5-dfc8945498ab] Correlation-Id: [4370be48-6605-41da-89c5-dfc8945498ab] User-Id: [6e9dd5ef-0dbd-4a76-83aa-75cb85732851] 接受:[application/json;charset=UTF-8]
无内容
< 404 未找到 < 内容类型:[application/json;charset=UTF-8]
内容尚不可用
at com.sap.chatbot.commerceconnector.CommerceAuthenticationProviderTest.testAccessTokenWithHeaders(CommerceAuthenticationProviderTest.java:94)
引起:java.lang.AssertionError:预期状态:<200> 但在 com.sap.chatbot.commerceconnector.CommerceAuthenticationProviderTest.testAccessTokenWithHeaders(CommerceAuthenticationProviderTest.java:94) 处为:<404> ]]>***
我的课程是:-
CommerceAuthenticationProvider.java
@Service("authenticationProvider")
public class CommerceAuthenticationProvider implements AuthenticationProvider {
private static final Logger logger = LoggerFactory.getLogger(CommerceAuthenticationProvider.class);
@Override
public AccessToken getUserAccessToken(Tuple2<String, WebClient> serviceConnectionDetails, MultiValueMap<String, String> queryParams) {
return serviceConnectionDetails._2
.post()
.uri(builder -> builder
.path(serviceConnectionDetails._1)
.queryParams(queryParams)
.build())
.accept(MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML)
.retrieve()
.bodyToMono(AccessToken.class)
.block();
}
}
CommerceAuthenticationProviderTest.java :-
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = CommerceConnectorApplication.class)
//@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = {"spring.main.webApplicationType=reactive"})
//@SpringBootTest()
@ActiveProfiles("test")
@AutoConfigureWebTestClient
public class CommerceAuthenticationProviderTest {
@Autowired
private WebTestClient webTestClient;
@MockBean
private AuthenticationProvider authenticationProvider;
public AccessToken getAccessToken() {
return new AccessToken("c5680a38-8ce2-4a28-93e4-db00fac4a2f9", "bearer", "39767", "basic openid");
}
public MultiValueMap<String, String> queryParams() {
MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>();
queryParams.add(CommerceConnectorConstants.AUTHORIZATION_CLIENT_ID, "asm");
queryParams.add(CommerceConnectorConstants.AUTHORIZATION_CLIENT_SECRET, "12341234");
queryParams.add(CommerceConnectorConstants.AUTHORIZATION_GRANT_TYPE,
CommerceConnectorConstants.REQUEST_HEADER_AUTHORIZATION_GRANT_TYPE);
queryParams.add(CommerceConnectorConstants.AUTHORIZATION_USERNAME, "abc@test.com");
return queryParams;
}
@Test
public void testAccessToken() throws Exception {
System.out.println("Test executed ->>>>>>>>>>>> "+webTestClient);
when(authenticationProvider.getUserAccessToken(any(), any())).then((res) -> Mono.just(getAccessToken()));
this.webTestClient.post().uri(builder -> builder.path("/authorizationserver/oauth/token")
.queryParams(queryParams())
.build())
.header(CommerceConnectorConstants.TENANT_ID, "4370be48-6605-41da-89c5-dfc8945498ab")
.header(CommerceConnectorConstants.CORRELATION_ID, "4370be48-6605-41da-89c5-dfc8945498ab")
.header(CommerceConnectorConstants.TENANT_USER_ID, "6e9dd5ef-0dbd-4a76-83aa-75cb85732851")
.accept(MediaType.APPLICATION_JSON_UTF8)
.exchange()
.expectStatus()
.isOk();
}
}
POM.xml(代码块):-
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
我尝试了所有但无法解决问题。请指教。谢谢
解决方案
推荐阅读
- mysql - 如何使用我的 sql 中具有“日期格式”的列按“月份”排序?
- prolog - Prolog中列表中的重复和双倍元素
- python - Dash,如何根据单击的按钮进行回调?
- mysql - 尝试导入大型 sql 数据库文件时,DBeaver mysql 中出现错误
- python - 在 django 视图中使用时间戳范围过滤错误
- discord.js - 查找服务器的前 300 个成员
- named-pipes - Node.js 命名管道 C#
- python - Tkinter,使用 sqlite3 更新树:OperationalError:没有这样的表:树
- angularjs - 隐藏搜索过滤器的滚动条并仅显示 Angular 中的 mat-option
- python - 在 python 文件中嵌套 kivy 小部件