如何为@async函数编写单元测试用例?

时间:2019-04-19 12:55:08

标签: java multithreading spring-boot

我想为一个使用spring框架的@async注释的异步函数编写一个测试用例。当我运行测试用例时,它由一个主线程而不是多个线程执行。我想通过多个线程运行异步功能。

我使用jmockit编写了测试用例。当我运行测试用例时,它由主线程执行。

Test Case:
  @Test
  public void applyOffers_ValidRequest_Success() {

    final QuoteDetailBO quotesToBeProcessed = prepareQuoteDetailRequest();
    new Expectations() {
      {
        grpOfferService.processOffer((QuoteDetailBO) any);
      }
      {
        cpOfferService.processOffer((QuoteDetailBO) any);
      }
    };

    final List<CompletableFuture<Void>> appliedOffers = new ArrayList<>();
    Arrays.asList(1, 2, 3).stream().forEach(i -> {
      appliedOffers.add(asyncCPGrpService.applyOffers(quotesToBeProcessed));
    });
    if (CompletableFuture.allOf(appliedOffers.toArray(new CompletableFuture[appliedOffers.size()]))
        .isDone()) {
      assertEquals(appliedOffers.size(), 3);
    }

  }

Code:

  @Async
  public CompletableFuture<Void> applyOffers(QuoteDetailBO quotesToBeProcessed) {
    log.info("Calling GRP and CP for {}", quotesToBeProcessed);
    grpOfferService.processOffer(quotesToBeProcessed);
    cpOfferService.processOffer(quotesToBeProcessed);
    return CompletableFuture.completedFuture(null);
  }

我想测试异步功能是否在多个线程上运行。

0 个答案:

没有答案