【问题标题】:Spring Boot : JAXBElement null pointer exceptionSpring Boot:JAXBElement 空指针异常
【发布时间】:2021-04-26 18:42:12
【问题描述】:

我对 Junit 5 和 Mockito 框架完全陌生。现在我正在尝试为该函数实现 JUnit 测试用例。有人可以帮忙模拟一下,因为下面的测试实现会在指定的行抛出 NullPointerException。

Class XYZ{

       @Autowired
       private SoapCall soapCall;

       public void validate(){
 
                 //code....

            JAXBElement <SubDTO> jax = (JAXBElement <Sub_DTO>) soapCall.callSoapService(val1, val2, val3, val4, val5);
 
            SubDTO  response = jax.getValue();  // Getting null pointer exception while Unit testing at this line   

        }
}

单元测试

Class TestValid{

   @Mock
   SoapCall soapCall;

   @InjectMocks
   XYZ xyzzy;

   @BeforeEach
   void setUp(){
      MockitoAnnotations.initMocks(this);
   }

   @Test
   public void test1(){
        SubDTO dto= new SubDTO("a","b","c");

        JAXBElement<SubDTO> jax = new JAXBElement <> (any(), any(), any());

        jax.setValue(dto)            

   Mockito.when(soapCall.callSoapService(any(),any(),any(),anyInt(),anyInt())).thenReturn( jax );

        Assertions.assertDoesNotThrow(()->xyz.validate());
   }
}

【问题讨论】:

  • 我非常有信心您应该更早获得 IllegalArgumentExeption:new JAXBElement &lt;&gt; (any(), any(), any())。请向我们展示堆栈跟踪。见github.com/javaee/jaxb-spec/blob/…

标签: java spring-boot junit mockito


【解决方案1】:

这条线在我看来很奇怪:

        JAXBElement<SubDTO> jax = new JAXBElement <> (any(), any(), any());

any() 是一个匹配器,仅在设置模拟或验证期间使用。它总是返回null

基本上,您正在编写与此相同的代码:

        JAXBElement<SubDTO> jax = new JAXBElement <> (null, null, null);

不是传入null 值,而是传入QName、一个类和该类的一个实例作为JAXBElement 构造函数的参数。

但是,当我尝试运行您的代码时,我没有收到NullPointerException。我在上面的行中收到 IllegalArgumentException,抱怨 null 值。

【讨论】:

    猜你喜欢
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 2018-10-01
    • 2019-02-06
    • 2012-07-07
    • 2018-12-31
    • 1970-01-01
    相关资源
    最近更新 更多