首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JMS与Arquillian的集成测试

JMS与Arquillian的集成测试
EN

Stack Overflow用户
提问于 2016-11-30 17:15:48
回答 1查看 895关注 0票数 0

我正在尝试测试是否可以在我的容器中填充一个主题。但是,在我的工厂中调用createConnection方法时,我一直得到一个空指针异常。下面是执行我的代码的方式:

代码语言:javascript
复制
@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);
    }

}

我对Arquillian进行了如下部署:

代码语言:javascript
复制
@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;
}

我的JBossEAP6.0.0 G2实现包含以下代码行:

代码语言:javascript
复制
<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>

我不能为我的一生弄明白为什么

代码语言:javascript
复制
final Connection connection = factory.createConnection();

正在抛出一个NullPinter。显然,工厂无法实例化,这使我相信Arquillian无法查看我的jndi绑定。但是,即使尝试这些加载工厂资源的组合,也会引发相同的错误:

代码语言:javascript
复制
@Resource(mappedName = "/ConnectionFactory")
@Resource(mappedName = "ConnectionFactory")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-01 17:21:40

虽然我的大部分代码是实现所有功能的良好垫脚石,但我缺少了触发嵌入式测试的两个关键组件:启动测试的正确注释和等待jms的正确方法。

代码语言:javascript
复制
@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
}

测试用例中的其他一切都是正确设置的,包括原始资源调用。

代码语言:javascript
复制
@Resource(mappedName = "java:jboss/jms/topic/sample/MySample")
private Topic topic;

@Resource(mappedName = "java:/ConnectionFactory")
private ConnectionFactory factory;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40894345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档