[英]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.