gpt4 book ai didi

java - 为服务编写集成测试

转载 作者:行者123 更新时间:2023-12-02 03:44:43 25 4
gpt4 key购买 nike

我有一个服务类,我想执行集成测试(白盒)。方法代码,

   @Async( ELLA_THREAD_POOL_EXECUTOR_NAME )
public void invokeEllaAsync( final IrisBo irisBo ) {

if( isTrafficAllowed( irisBo ) ) {
callEllaService( irisBo );
}
}

public void callEllaService( final IrisBo irisBo ) {

HttpHeaders ellaHeaders = createRequestHeaders( irisBo );

ServiceResponse<EllaResponseDto> response = connector.call( EllaDtoConverter.convertToRequest( irisBo ), ellaHeaders );

if( !response.isSuccess() ) {
LOG.error( "ERROR", response, irisBo );
}
}

下面提供测试的方法,

@Test
public void testCallEllaServiceIsSuccessful() throws IOException {

String emailAgeResponseJson = readFile( ELLA_RESPONSE_FILE );

wireMockRule.stubFor( post( urlEqualTo( ELLA_ENDPOINT ) ).willReturn( okJson( emailAgeResponseJson ) ) );

TestRequestInformation testRequestInformation = new TestRequestInformation();
IrisBo irisBo = EllaTestDataProvider.createValidIrisBoWithoutRequest();


service.callEllaService( irisBo );


}

我想验证响应数据,方法 invokeEllaAsync 返回 void。响应位于 callEllaService 方法内。

如何验证响应数据?

最佳答案

首先,快速谷歌搜索显示 this question 。因为我并不是 100% 你确实在谈论 Spring,所以我不建议将其视为重复。

现在我将提供一些额外的技术,假设我们正在讨论 Spring 的异步方法(集成测试可能使用 SpringRunner 运行)

从基础开始,简而言之,@Async 方法在不同的线程池上执行。从技术上讲,它是通过生成运行时代理来完成的。因此,有很多技术(出于我的想法,因为我没有真正使用它们)可以提供帮助:

选项 1

禁用测试的异步支持。这可以通过在自定义配置类上创建某种启用异步支持的条件来完成。像这样的事情:

 @Configuration
@EnableAsync
@ConditionalOnProperty(name = "async.support.enabled", havingValue = true)
public class MyAsyncEnablerConfiguration {

}

对于测试,使变量false

选项 2

如果它是 Controller 上的方法并且您使用mockMvc测试(同样,这只是我的猜测,我不知道代码到底在哪里),您可以利用asyncDispatch方法,该方法将处理异步请求。

看起来像这样:

mockMvc.perform(asyncDispatch(mvcResult)) // <-- Note this call
.andExpect(status().isOk())
...

可以找到完整的示例 Here

选项 3

请注意,@Async 方法的返回类型不必是 void。它可以是Future,甚至是spring的AsyncResult。因此,如果它是 future - 您可以在代码中调用 future.get() 并获取结果。

要了解有关返回结果类型的更多信息,请检查 This tutorial

关于java - 为服务编写集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56814889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com