4

I have to write unit test for my producer and consumer in ActiveMQ Artemis. I'm using publish-subscribe model. How do I write the test cases for both?

The following is my producer code:

@Component
public class OrderPublisher {
    @Autowired
    JmsTemplate jmsTemplate;
    private static final Logger log=LoggerFactory.getLogger(OrderPublisher.class) ;

    @Value("${jsa.activemq.topic}")
    String orderTopic;

    public void sendOrderData(String orderData) {
        log.info("sending message to queue");
        jmsTemplate.convertAndSend(orderTopic,orderData);   
    }
}

This is my application properties for producer:

spring.jms.pub-sub-domain=true
jsa.activemq.topic=bt-order-queue

spring.artemis.mode=native
spring.artemis.host=localhost
spring.artemis.port=61616
spring.artemis.user=admin
spring.artemis.password=admin

This is my code for consumer which is in a separate project.

@Component
public class OrderSubscriber {
 
    private final RestTemplate restTemplate = new RestTemplate();

    ObjectMapper objectMapper= new ObjectMapper();
    private static final Logger log = LoggerFactory.getLogger(OrderSubscriber.class);

    @JmsListener(destination = "${jsa.activemq.topic}")
    public void receiveMessage(String order) throws JsonMappingException, JsonProcessingException {
        System.out.println("order data from queue::"+order);
    }
}

Properties file for consumer:

spring.artemis.mode=native
spring.artemis.host=localhost
spring.artemis.port=61616
spring.artemis.user=admin
spring.artemis.password=admin
spring.jms.pub-sub-domain=true
jsa.activemq.topic=bt-order-queue

This what I'm trying for prodcuer:

@RunWith(SpringRunner.class)
@SpringBootTest

class ApplicationTests {    
    
    @Autowired
    OrderPublisher publisher;   
    
    @Rule
    public EmbeddedActiveMQResource resource = new EmbeddedActiveMQResource();
     
    //ActiveMQProducerResource producer = new ActiveMQProducerResource(resource.getVmURL(), "bt-order-queue");
    //ActiveMQConsumerResource consumer = new ActiveMQConsumerResource(resource.getVmURL(), "bt-order-queue");
     
    @Before
    public void before() {
        resource.start();
        resource.createQueue("bt-order-queue");
    }
    
    @Test
    void contextLoads() {       
        publisher.sendOrderData("test");
        
        ClientMessage cons=resource.receiveMessage("bt-order-queue", 100000);
        System.out.println("cons::"+cons.toString());       
    }
}

But as I'm lacking information on how to write it, I'm just trying to figure out a way

Justin Bertram
  • 29,372
  • 4
  • 21
  • 43
Apurv Adarsh
  • 125
  • 1
  • 12

0 Answers0