首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Mockito来模拟JmsTemplate?

如何用Mockito来模拟JmsTemplate?
EN

Stack Overflow用户
提问于 2018-04-27 13:14:51
回答 2查看 10K关注 0票数 2

我尝试测试一个类,其中我发送一个jms消息,但我不能模拟JmsTemplate

JmsProducer.class :

代码语言:javascript
复制
@Component
public class JmsProducer {

@Autowired
private JmsTemplate jmsTemplate;

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

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

JmsProducerTest.Class :

代码语言:javascript
复制
@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: object不是声明类的实例

你对这个问题有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-30 17:38:19

我还会注意到,它也不能用JDK1.8.05来模拟JmsTemplate和ObjectMapper,当我将jdk更改为1.8.74时,效果很好。

我引用了discussion

票数 0
EN

Stack Overflow用户

发布于 2018-04-28 08:56:37

如果您正在使用SpringRunner,则应该将其添加到init方法MockitoAnnotations.initMocks(this);中,因为@InjectMocks将正确地使用MockitoJUnitRunner

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50063246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档