我有休息控制器来启动/停止rabbitmq QUEUE。那工作正常。但我需要为这个休息控制器编写 junit。我也做过junit,但这看起来不太好。我不确定我们能为这个休息控制器编写 junit 有多好。请帮助我为此编写更好的junit。
我们在项目中使用了 spring 框架和 mockito。
我的休息控制器
package com.compnay.depart.rest;
import org.springframework.amqp.rabbit.listener.MessageListenerContainer;
import org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class QueueController {
private static final String LISTENER_ID = "lister";
@Autowired
private RabbitListenerEndpointRegistry rabbitListenerEndpointRegistry;
@GetMapping(path = "/"+LISTENER_ID+"/start")
public String start() {
MessageListenerContainer listenerContainer = rabbitListenerEndpointRegistry.getListenerContainer(LISTENER_ID);
listenerContainer.start();
return "started";
}
@GetMapping(path = "/"+LISTENER_ID+"/stop")
public String stop() {
MessageListenerContainer listenerContainer = rabbitListenerEndpointRegistry.getListenerContainer(LISTENER_ID);
listenerContainer.stop();
return "stopped";
}
//This getter and setter method, i have created for JUNIT.
public RabbitListenerEndpointRegistry getRabbitListenerEndpointRegistry() {
return rabbitListenerEndpointRegistry;
}
public void setRabbitListenerEndpointRegistry(RabbitListenerEndpointRegistry rabbitListenerEndpointRegistry) {
this.rabbitListenerEndpointRegistry = rabbitListenerEndpointRegistry;
}
}
这是我的 JUNIT
package com.compnay.depart.rest;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.core.MessageListener;
import org.springframework.amqp.rabbit.listener.MessageListenerContainer;
import org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.support.AnnotationConfigContextLoader;
import org.springframework.test.web.client.MockRestServiceServer;
import com.fasterxml.jackson.databind.ObjectMapper;
@RunWith(SpringRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class,
classes={ ObjectMapper.class})
public class QueueControllerTest
{
private MockRestServiceServer server;
@Autowired
public TraceabilityRestTemplate restTemplate;
@MockBean
private RabbitListenerEndpointRegistry rabbitListenerEndpointRegistry;
public QueueController filingListnerController = new QueueController();
@Before
public void init() {
server = MockRestServiceServer.bindTo(restTemplate).build();
}
@After
public void shutdown() {
server.reset();
}
@Test
public void testStart() {
when(rabbitListenerEndpointRegistry.getListenerContainer(anyString())).thenReturn(new MessageListenerContainer() {
@Override
public void stop() {
// TODO Auto-generated method stub
}
@Override
public void start() {
// TODO Auto-generated method stub
}
@Override
public boolean isRunning() {
// TODO Auto-generated method stub
return false;
}
@Override
public void setupMessageListener(MessageListener messageListener) {
// TODO Auto-generated method stub
}
@Override
public MessageConverter getMessageConverter() {
// TODO Auto-generated method stub
return null;
}
});
filingListnerController.setRabbitListenerEndpointRegistry(rabbitListenerEndpointRegistry);
String response = filingListnerController.start();
assertEquals("started", response);
}
@Test
public void testStop() {
when(rabbitListenerEndpointRegistry.getListenerContainer(anyString())).thenReturn(new MessageListenerContainer() {
@Override
public void stop() {
// TODO Auto-generated method stub
}
@Override
public void start() {
// TODO Auto-generated method stub
}
@Override
public boolean isRunning() {
// TODO Auto-generated method stub
return false;
}
@Override
public void setupMessageListener(MessageListener messageListener) {
// TODO Auto-generated method stub
}
@Override
public MessageConverter getMessageConverter() {
// TODO Auto-generated method stub
return null;
}
});
filingListnerController.setRabbitListenerEndpointRegistry(rabbitListenerEndpointRegistry);
String response = filingListnerController.stop();
assertEquals("stopped", response);
}
}