0

我无法模拟 jms queue TextMessage 来测试 JMSException 尝试了多种方法,但似乎我不理解它。任何帮助表示赞赏。

似乎我无法正确模拟和利用 Message 对象。

源代码:

    public class ConsumeService {
    
      private DataProcessService dataProcessService;
    
    @JmsListener
      public void getMessage(final Message message) throws InterruptedException {
    
        if (message instanceof TextMessage) {
          TextMessage message = (TextMessage) message;
          try {
            
    
            dataProcessService.processRequestData(
                message.getText(), prepareInfo(message));
            
    
          } catch (JMSException e) {
            log.error("JMSException in message");
          } catch (ResourceAccessException e) {
            log.error("IOException in message");
          }
        } else {
          log.error("message convertion failed!");
        }
      }
     }

单元测试代码:

    @InjectMocks ConsumeService consumeService;
    
    @Mock DataProcessService dataProcessService;
    
    @Test
      public void testException() throws ResourceAccessException, JMSException{
    
        TextMessage message = mock(TextMessage.class);
        
        Mockito.lenient()
        .when(
            dataProcessService.processRequestData(
                    ((TextMessage) message).getText(), prepareInfo((TextMessage) message)))
        .thenThrow(JMSException.class);
        
        assertThrows(
                JMSException.class,
                () -> this.consumeService.getMessage(message));
      }
    
    private Map<String, String> prepareInfo(TextMessage mqMessage) throws JMSException {
    
        ..
        ..
        
      }

错误:

org.mockito.exceptions.base.MockitoException: 
Checked exception is invalid for this method!
4

0 回答 0