Java 使用WireMock访问异步响应
我提供了课程Java 使用WireMock访问异步响应,java,spring,wiremock,Java,Spring,Wiremock,我提供了课程 @Service public class EllaService { private static final Logger LOG = LoggerFactory.getLogger( EllaService.class ); @Autowired @Qualifier( ELLA_CONNECTOR_BEAN_NAME ) private EntityServiceConnectable<EllaResponseDto> con
@Service
public class EllaService {
private static final Logger LOG = LoggerFactory.getLogger( EllaService.class );
@Autowired
@Qualifier( ELLA_CONNECTOR_BEAN_NAME )
private EntityServiceConnectable<EllaResponseDto> connector;
@Autowired
private EllaFilterConfigHolder configHolder;
@Autowired
private EllaServiceConfiguration config;
@Autowired
private Environment env;
/**
* Initialize the service.
*/
@PostConstruct
public void initialize() {
this.configHolder = config.ellaFilterConfigHolder( env );
}
// ========================================================================
/**
* Asynchronously call Ella. Determine if traffic is applicable for Ella and if yes forward to Ella.
*
* @param irisBo IrisBo object
*/
@Async( ELLA_THREAD_POOL_EXECUTOR_NAME )
public void invokeEllaAsync( final IrisBo irisBo ) {
if( isTrafficAllowed( irisBo ) ) {
callEllaService( irisBo );
}
}
// ========================================================================
/**
* Call ella service without processing service response.
*
* @param irisBo IrisBo object
*/
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 occured while calling ella async [ irisBo: {} - response: {}]", response, irisBo );
}
}
// ========================================================================
private boolean isTrafficAllowed( IrisBo irisBo ) {
if( configHolder.isExternalBuyerFilterEnabled() && irisBo.getBuyer().isExternalKnownCustomer() ) {
return false;
}
if( configHolder.isInternalBuyerFilterEnabled() && irisBo.getBuyer().isInternalKnownCustomer() ) {
return false;
}
return isShopNotConfigured( irisBo );
}
// ========================================================================
private boolean isShopNotConfigured( IrisBo irisBo ) {
return !configHolder.getShopIdsToFilterSet().contains( irisBo.getOrder().getShopId() );
}
// ========================================================================
private HttpHeaders createRequestHeaders( final IrisBo irisBo ) {
HttpHeaders ellaHeaders = new HttpHeaders();
ellaHeaders.add( ACCEPT, APPLICATION_JSON_UTF8_VALUE );
ellaHeaders.add( CONTENT_TYPE, APPLICATION_JSON_UTF8_VALUE );
RatepayHeaders.append( ellaHeaders, irisBo.getRequestInfo() );
return ellaHeaders;
}
}
IT测试运行良好,但我也希望访问LOC返回的异步值并对其进行验证
ServiceResponse<EllaResponseDto> response = connector.call( EllaDtoConverter.convertToRequest( irisBo ), ellaHeaders );
serviceressponse=connector.call(EllaDtoConverter.convertToRequest(irisBo),ellaheader);
怎么可能?问题在于,测试在异步调用完成之前退出,因此您没有机会在WireMock中验证它?否,我调用了返回void的public方法。我认为wire-mock也没有提供测试异步的机会。有办法吗?WireMock对应用程序中是否使用异步方法漠不关心(这是一个黑匣子)。困难往往是异步调用会立即返回,这意味着在断言是否发生请求时需要自己进行同步。问题在于测试在异步调用完成之前退出,因此,您没有机会在WireMock中验证它?不,我调用了返回void的public方法。我认为wire-mock也没有提供测试异步的机会。有办法吗?WireMock对应用程序中是否使用异步方法漠不关心(这是一个黑匣子)。困难往往是异步调用会立即返回,这意味着在断言请求是否发生时需要自己进行同步。
ServiceResponse<EllaResponseDto> response = connector.call( EllaDtoConverter.convertToRequest( irisBo ), ellaHeaders );