2016-11-30 2 views
0

Je tente de tester qu'un sujet peut être rempli dans mon conteneur. Cependant, je continue d'obtenir une exception de pointeur null lors de l'appel de la méthode createConnection dans ma fabrique. Voici comment mon code est en cours d'exécution:Test d'intégration de JMS avec Arquillian

@RunWith(Arquillian.class) 
public class TopicPublishTest { 

    @Resource(mappedName = "java:jboss/jms/topic/sample/MySample") 
    private Topic topic; 

    @Resource(mappedName = "java:/ConnectionFactory") 
    private ConnectionFactory factory; 

    @Test 
    public void testMessageInTopic() throws Exception { 
     final Connection connection = factory.createConnection(); 
     connection.start(); 
     final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 

     final MessageConsumer consumer = session.createConsumer(topic); 
     final TextMessage message = (TextMessage) consumer.receiveNoWait(); 
     System.out.println("### the mssage is " + message); 
    } 

} 

J'ai un déploiement avec Arquillian comme ceci:

@Deployment(name = "my-service", order = 1, testable = true) 
public static Archive<?> targetDeployment() { 
    final WebArchive archive = ShrinkWrap.createFromZipFile(WebArchive.class, new File(
      "target/my-service.war")); 
    return archive; 
} 

Mon EAP Jboss 6.0.0 mise en œuvre G2 contient les lignes de code suivantes:

<connection-factory name="InVmConnectionFactory"> 
    <connectors> 
     <connector-ref connector-name="in-vm"/> 
    </connectors> 
    <entries> 
     <entry name="java:/ConnectionFactory"/> 
    </entries> 
</connection-factory> 

.... 

<jms-topic name="MySample"> 
    <entry name="java:jboss/jms/topic/sample/MySample"/> 
    <entry name="java:jboss/exported/jms/topic/sample/MySample"/> 
</jms-topic> 

Je ne peux pas pour la vie de me comprendre pourquoi

final Connection connection = factory.createConnection(); 

lance un NullPinter. Évidemment, l'usine ne peut pas être instanciée, ce qui m'amène à croire qu'Arquillian est incapable de regarder mes liaisons jndi. Cependant, en essayant même de ces combinaisons de chargement de la ressource d'usine lance la même erreur:

@Resource(mappedName = "/ConnectionFactory") 
@Resource(mappedName = "ConnectionFactory") 

Répondre

0

Bien que la majorité de mon code était un bon tremplin à rendre tout fonctionnel, je manque deux éléments clés pour déclencher le test intégré , l'annotation correcte pour démarrer le test et la bonne façon d'attendre jms.

@Test 
@OperateOnDeployment("my-service") 
public void testMessageInTopic() throws Exception { 
    // insert the message into the topic 
    final TextMessage message = (TextMessage) consumer.receive(15000); 
    // perform assertions after message received, not null, text, etc 
} 

Tout le reste dans les scénarios de test est configuré correctement, y compris les invocations de ressources d'origine.

@Resource(mappedName = "java:jboss/jms/topic/sample/MySample") 
private Topic topic; 

@Resource(mappedName = "java:/ConnectionFactory") 
private ConnectionFactory factory;