我尝试测试一个我发送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:object不是声明类的实例
你对这个问题有任何想法吗?
答案 0 :(得分:1)
如果您使用SpringRunner
,则应添加init
方法MockitoAnnotations.initMocks(this);
,因为@InjectMocks
与MockitoJUnitRunner
的工作正确无误。
PS。 ReflectionTestUtils.setField(jmsProducer, "destinationQueue", DESTINATION);
- 但您的字段有另一个名称 - destination
,而不是destinationQueue
答案 1 :(得分:0)
我还会注意到它不能使用jdk 1.8.05模拟JmsTemplate和ObjectMapper,当我将JDK更改为1.8.74时效果很好。
我参考了discussion