繁体   English   中英

如何用Mockito模拟JmsTemplate?

[英]How to mock JmsTemplate with Mockito?

我尝试测试一个类,在该类中我发送jms消息,但无法模拟JmsTemplate

JmsProducer.class:

@Component
public class JmsProducer {

@Autowired
private JmsTemplate jmsTemplate;

@Value("${destination}")
private String destination;

public void send(String message){
    jmsTemplate.convertAndSend(destination, message);
}
}

JmsProducerTest.Class:

@RunWith(SpringRunner.class)
public class JmsProducerTest {

private static final String DESTINATION= "example";
private static final String MESSAGE= "message";

@InjectMocks
private JmsProducer jmsProducer;

@MockBean
JmsTemplate jmsTemplate;

@Before
public void init(){
    ReflectionTestUtils.setField(jmsProducer, "destinationQueue", DESTINATION);
}

@Test
public void testsend(){
    jmsProducer.send(MESSAGE);
    verify(jmsTemplate,times(1)).convertAndSend(DESTINATION, MESSAGE);
}
}

当我运行此测试用例时,它给了我:java.lang.IllegalArgumentException:对象不是声明类的实例

您对这个问题有任何想法吗?

如果您使用的是SpringRunner ,则应将其添加到init方法MockitoAnnotations.initMocks(this); ,因为@InjectMocks将与MockitoJUnitRunner一起正常工作。

PS。 ReflectionTestUtils.setField(jmsProducer, "destinationQueue", DESTINATION); -但您的字段有另一个名称destination ,而不是destinationQueue

我还会注意到,使用jdk 1.8.05也无法模拟JmsTemplate和ObjectMapper,当我将JDK更改为1.8.74时,它的效果很好。

我提到了讨论

暂无
暂无

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

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