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 );