繁体   English   中英

Junit 对于 CompletableFuture.runAsync()

[英]Junit for CompletableFuture.runAsync()

我想说感谢你们每一位与我们分享你们的知识和时间。 在这里,我很想知道我们如何为在 CompletableFuture.runAsync() 中编写的业务逻辑编写 junit 测试用例,例如

public class Loan{
public Transaction writeIntoCassandra(Transaction transaction){
   private startTime = System.currentTimeMillis();
   CompletableFuture.runAsync(()-> {
         try{
                writeIntoCassandraTable(transaction);
            }
         catch(JsonConversionException e){
         }         
      });
   CompletableFuture.runAsync(()-> {
         try{
                writeIntoCassandraTable2(transaction);
            }
         catch(JsonConversionException e){
         }         ​
     ​});
return transaction;
}
}

我在下面写 junit 上面实现的测试用例

@InjectMocks
private Loan loan;

    public void writeIntoCassendraTest(){
  String jsonTransaction = "";
  ObjectMapper objectMapper = new ObjectMapper();
  Transaction transaction = objectMapper.readValue(jsonTransaction, Transaction.class);
  loan.writeIntoCassendra(transaction);
  //assertThat();
}

在这里,当我运行 junits 时,它没有执行在“CompletableFuture.runAsync(()-> {”之后编写的代码,即私有方法 writeIntoCassandraTable(transaction) 和 writeIntoCassandraTable2(transaction) 没有被执行。我在 try 块中保留了断点但是控制在这一点上没有停止。这导致代码覆盖率低。帮助我理解为什么它没有被执行以及如何修复它。如果您需要更清晰或更详细的信息,请告诉我。

我建议在您的原始方法中使用supplyAsync切换runAsync 然后,从supplyAsync方法返回一些东西。 至于要返回什么,您可能需要使用 Mockito 或其他一些等效的 mocking 库。 如果不是那样,也许您可以使用一些虚拟值/对象? 从那里开始,只需做出您的断言,您就应该有一个有效的单元测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM