@SpringBootTest expected single matching bean but found 2

Viewed 46

I have 2 beans with the same class. They are running fine but fails to run on Unit Test

@Configuration
public class RabbitmqConfig {

    @Bean("rabbitmqConnectionFactoryLocal")
    //@Qualifier("rabbitmqConnectionFactoryLocal")
    public CachingConnectionFactory rabbitmqConnectionFactoryLocal(
            @Value("${spring.rabbitmq.local.host}") String host,
            @Value("${spring.rabbitmq.port}") int port,
            @Value("${spring.rabbitmq.virtual-host}") String virtualHost) {
        //skip code here
    }

    @Bean("rabbitmqConnectionFactoryRemote")
    //@Qualifier("rabbitmqConnectionFactoryRemote")
    public CachingConnectionFactory rabbitmqConnectionFactoryRemote(
            @Value("${spring.rabbitmq.remote.host}") String host,
            @Value("${spring.rabbitmq.port}") int port,
            @Value("${spring.rabbitmq.virtual-host}") String virtualHost) {
        //skip code here
    }

    //@Bean(name = "rabbitmqTemplateLocal")
    @Bean
    @Qualifier("rabbitmqTemplateLocal")
    public RabbitTemplate rabbitmqTemplateLocal(@Qualifier("rabbitmqConnectionFactoryLocal") ConnectionFactory connectionFactory) {
        //skip code here
    }

    //@Bean(name = "rabbitmqTemplateRemote")
    @Bean
    @Qualifier("rabbitmqTemplateRemote")
    public RabbitTemplate rabbitmqTemplateRemote(@Qualifier("rabbitmqConnectionFactoryRemote") ConnectionFactory connectionFactory) {
        //skip code here
    }

}
@Slf4j
@RestController
@RequestMapping(value = "/v1/messages")
public class MessageController {

    //@Resource(name="rabbitmqTemplateLocal")
    @Autowired
    @Qualifier("rabbitmqTemplateLocal")
    private RabbitTemplate rabbitmqTemplateLocal;

    //@Resource(name="rabbitmqTemplateRemote")
    @Autowired
    @Qualifier("rabbitmqTemplateRemote")
    private RabbitTemplate rabbitmqTemplateRemote;

    @GetMapping("/ping")
    public String ping() {
        return "pong";
    }

    //skip code here
}

When I run following Unit Test, I got the error message

No qualifying bean of type 'org.springframework.amqp.rabbit.core.RabbitTemplate' available: expected single matching bean but found 2: rabbitmqTemplateLocal,rabbitmqTemplateRemote

No qualifying bean of type 'org.springframework.amqp.rabbit.connection.ConnectionFactory' available: expected single matching bean but found 2: rabbitmqConnectionFactoryRemote,rabbitmqConnectionFactoryLocal

(The Code itself is running fine, but not the Unit Test)

@SpringBootTest
@AutoConfigureMockMvc
@TestPropertySource(locations = "classpath:application-test.properties")
class MessageControllerTest {

    @Autowired
    private MockMvc mvc;

    //@MockBean (name = "rabbitmqTemplateLocal")
    //private RabbitTemplate rabbitmqTemplateLocal;

    //@MockBean (name = "rabbitmqTemplateRemote")
    //private RabbitTemplate rabbitmqTemplateRemote;

    @Test
    @DisplayName("Get /ping return success")
    void whenPingRequest_thenReturnPongMessage() throws Exception {
        mvc.perform(get("/v1/messages/ping"))
                .andExpect(status().isOk())
                .andExpect(content().string(containsString("pong")));
    }
}

How to make this Unit Test run? Tried the @Bean and @Resource combo and got the same error. Also tried @MockBean in test file and got the same error.

0 Answers
Related