我意识到在运行导致问题的arquillian测试用例期间会使用一些未添加到我的shrinkWrap存档中的类。
我的应用程序配置中有一个启动功能,带有这样的签名
public void boot(@Observes StartupEvent startupEvent, ExternalContext externalContext,应用程序应用程序, ProjectStage deltaspikeProjectStage)
(当JSF准备好并启动并运行时发送startUpEvent)并且这不会添加我的ShrinkWrap,但是当我运行测试用例时,它们会调用我的启动函数。 这种不必要的召唤破坏了每一件事。当我评论这个函数时,我的测试用例运行正常。
我在想我的测试用例的可用类应该使用像
这样的命令添加到ShrinkWrap存档中WebArchive webArchive= ShrinkWrap
.create(WebArchive.class, "ROOT.war")
.addClasses(CdiTestBean.class,PersistenceListener.class)
但似乎我错了。我应该怎么做才能使一个类不能用于shrinkWrap存档!!
答案 0 :(得分:1)
如果您使用的嵌入式容器可能存在问题,因为所有CDI bean都位于同一个类路径中。因此,它们可能是由嵌入式容器/ cdi实现扫描的。如果可能的话,尝试使用托管版本,这应该给你正确的隔离。
答案 1 :(得分:0)
在返回webArchive
之前添加此行:
new ZipExporterImpl(webArchive).exportTo(new File(System.getProperty("java.io.tmpdir"), "myWebArchive.war"), true);
它会将您的Web存档保存到Java的临时系统文件夹中的文件中。
提取战争以检查是否所有必需的类都在那里。
调用方法addClasses(Class... classes)
应该将类添加到战争中。