【问题标题】:I am unable to test the below mentioned method in JUnit testcase and getting ClassCastException我无法在 JUnit 测试用例中测试下面提到的方法并获得 ClassCastException
【发布时间】:2022-01-04 05:04:45
【问题描述】:

对于以下方法,我正在为声纳覆盖率编写 JUnit 测试用例。

    @Transformer
    public Object errorUnWrapper(Message<?> message) {
        String value = "";
        try {
            if (!errorFlag) {               
                value = errorTransform(ESBConstants.SYSTEMERRCODE, ESBConstants.SYSTEMERROR, ESBConstants.SYSTEMTEXT);
                
            } else {                
                value = getbankholiday.getErrorMessage();
            }
        } catch (Exception e) {
            getbankholiday.getE2EObject().logMessage("3005", "Error Occurred in error unwrapper");          
            value = ESBConstants.SYSTEMERRORXML;            
        }
        MessageHeaders headers = ((MessagingException) message.getPayload()).getFailedMessage().getHeaders();
        return MessageBuilder.withPayload(value).copyHeaders(message.getHeaders())
                .copyHeadersIfAbsent(headers).setHeader(ESBConstants.CONTENTTYPE, ESBConstants.CONTENTVALUE)
                .build();
    }

JUnit 测试用例:

@Test
    void testErrorUnWrapper() throws IOException {
        String xml = FileUtils.readFileToString(new File("src/test/resources/JunitTestCases/input/TC02_wltRequest.xml"),
                "UTF-8");
        test = MessageBuilder.withPayload(xml).build();
        errorTransform.errorUnWrapper(test);
        Assertions.assertTrue(true);
    }

但是,无法在 JUnit 测试用例中模拟或测试以下行。

MessageHeaders headers = ((MessagingException) message.getPayload()).getFailedMessage().getHeaders();

例外:

java.lang.ClassCastException: java.lang.String cannot be cast to org.springframework.messaging.MessagingException
    at com.bt.or.esb.exceptions.ErrorTransform.errorUnWrapper(ErrorTransform.java:75)
    at com.bt.or.esb.exceptions.ErrorTransformTest.testErrorUnWrapper(ErrorTransformTest.java:87)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

【问题讨论】:

    标签: java junit sonarqube


    【解决方案1】:

    您的高效代码

    (MessagingException) message.getPayload()
    

    意味着您希望 message.payload 是一个 MessagingException。但是在你的测试中,你创建了

    MessageBuilder.withPayload(xml).build()
    

    所以有效载荷将是一个字符串。您需要使用 MessagingException 作为有效负载构建消息。

    【讨论】:

      【解决方案2】:

      这通常意味着您需要重构。 除了value 之外,其他所有内容在if elsecatch 块中都很常见

      为什么不先计算value,然后在下面两行执行?

      MessageHeaders headers = ((MessagingException) message.getPayload()).getFailedMessage().getHeaders();
      return MessageBuilder.withPayload(value).copyHeaders(message.getHeaders()).copyHeadersIfAbsent(headers)
                          .setHeader(ESBConstants.CONTENTTYPE, ESBConstants.CONTENTVALUE).build();
      

      【讨论】:

      • 嗨拉贾尼!现在我已经修改了代码并获得了 ClassCastException。你能帮帮我吗?
      猜你喜欢
      • 1970-01-01
      • 2022-10-02
      • 2018-12-22
      • 2020-05-29
      • 2022-09-25
      • 2014-01-07
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多