0

我意识到在运行导致问题的 arquillian 测试用例期间使用了一些未添加到我的 shrinkWrap 存档中的类。

我的应用程序配置中有一个启动功能,其签名如下

public void boot(@Observes StartupEvent startupEvent, ExternalContext externalContext, Application application, ProjectStage deltaspikeProjectStage)

(当 JSF 准备好并启动并运行时发送 startUpEvent)并且这没有添加到我的 ShrinkWrap 中,但是当我运行测试用例时,它们会调用我的引导函数。这个不必要的电话毁了一切。当我评论这个函数时,我的测试用例运行良好。

我在想我的测试用例的可用类应该使用如下命令添加到 ShrinkWrap 存档中

WebArchive webArchive=  ShrinkWrap
                    .create(WebArchive.class, "ROOT.war")
                    .addClasses(CdiTestBean.class,PersistenceListener.class)

但似乎我错了。我应该怎么做才能使一个类对 shrinkWrap 档案不可用!

4

2 回答 2

1

如果您使用的嵌入式容器可能会出现问题,因为您所有的 CDI bean 都在同一个类路径上。因此,它们可能会被嵌入式容器/cdi 实现扫描。如果可能,请尝试使用托管版本,这应该会给您适当的隔离。

于 2013-06-14T15:41:23.990 回答
0

在返回之前webArchive添加这一行:

new ZipExporterImpl(webArchive).exportTo(new File(System.getProperty("java.io.tmpdir"), "myWebArchive.war"), true);

它会将您的 Web 存档保存到 Java 的临时系统文件夹中的一个文件中。

提取战争以检查是否所有必需的类都在那里。

调用方法addClasses(Class... classes)应该将类添加到战争中。

于 2013-06-13T10:07:14.107 回答