如何在Spring框架中为RabbitListenerEndpointRegistry编写junit

问题描述

我有rest控制器来启动/停止rabbitmq QUEUE。很好。但我需要为此休息控制器写junit。我也做了junit,但这看起来不太好。我不确定我们可以为这个rest控制器编写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);
    }   
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)