Junit,如何使用 Junit 覆盖回调代码?

Junit, How to cover the callback code using Junit?

提问人:k-block 提问时间:1/23/2023 最后编辑:schneidak-block 更新时间:1/27/2023 访问量:41

问:

我必须编写一个测试用例来涵盖一个将回调作为参数之一的方法。它看起来像下面的代码片段。

JAXBElement<MyCustomObject> obj = null;

try {
    obj = (JAXBElement<MyCustomObject>) template.marshall("some string", new SoapActionCallback("some string") {
        public void doWithMessage(MyMessageClass message) {
          // some logic 
});
}

如何覆盖回调逻辑?

我无法弄清楚如何覆盖回调逻辑。

Java JUnit

评论


答:

0赞 schneida 1/23/2023 #1

我不确定这是否是最好的模式,但我经常做的是使用 CompletableFuture 来处理这些类型的回调。

@Test
public void testMethod() throws Exception {
    JAXBElement<MyCustomObject> obj = null;

    //Instantiate a future before the callback
    final CompletableFuture<MyMessageClass> callbackFuture = new CompletableFuture<>();

    try {
        obj = (JAXBElement<MyCustomObject>) template.marshall("some string", new     SoapActionCallback("some string") {
        public void doWithMessage(MyMessageClass message) {
          //Complete the future within the callback
          callbackFuture.complete(message);
        });
    }

   //Wait until the future has completed in your callback and do the verification afterwards
   MyMessageClass message = callbackFuture.get(5, TimeUnit.SECONDS);
   assertEquals("your verification", message.toString());

}