【问题标题】:add packages in deployment jar using shrinkWrap in arquillian test在 arquillian 测试中使用 shrinkWrap 在部署 jar 中添加包
【发布时间】:2015-08-10 12:10:01
【问题描述】:

我正在使用 arquillian 进行单元测试。我正在使用 shrinkWrap 创建部署 jar。但是为此我需要添加我项目中使用的所有包,数量很多。

以下是我的测试文件

@RunWith(Arquillian.class)
public class GreeterTest {



    @Deployment
    public static JavaArchive createDeployment() throws NamingException {

        return ShrinkWrap.create(JavaArchive.class, "test.jar")
                .addPackage(ABC.class.getPackage())
                .addPackage(EFG.class.getPackage())
                .addPackage(HIJ.class.getPackage())
                .addPackage(KLM.class.getPackage())
                .addPackage(NOP.class.getPackage())
                .addPackage(QRS.class.getPackage())
                .addPackage(TUV.class.getPackage())
                .addPackage(XYZ.class.getPackage())

                .addAsResource("test-persistence.xml", "META-INF/persistence.xml")
                .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");

      }

    @Inject
    ABC abc;

    @Inject
    EFG efg;

    @Inject
    HIJ hij;

    @Inject
    KLM klm;

    @Inject
    NOP nop;

    @Test
    public void shouldBeAbleToInjectEJBAndInvoke() throws Exception {

        abc.getDetail();

    }
}

你可以看到 .addPackage()。我的项目中有数百个包。明显的代码量将大幅增加

还有其他方法吗?不然我一定是犯了大错

【问题讨论】:

  • 顺便说一句。您的资源定义错误。应该是:.addAsManifestResource("META-INF/test-persistence.xml", "persistence.xml");

标签: java jboss ejb jboss-arquillian


【解决方案1】:

我建议你使用包路径的字符串表示:“com.root.core”等。还有一些方法:

addPackage(String pack)

addPackages(boolean recursive, String... packages)

我猜最新版本更适合您,因为它为您提供了递归添加包的可能性,因此您可以避免重复包含每个包。例如:

.addPackages(true, "com.root")

【讨论】:

  • 成功了。谢谢。但是现在它给了我使用库 m 的相同错误,例如 org.codehaus、com.google
  • 一般来说它应该解决依赖关系。您可以尝试手动添加该问题依赖项。我已经在这里描述了这种方法:stackoverflow.com/questions/30932182/…
【解决方案2】:

您可以使用应用程序的现有EAR/WAR/JAR,因为在某些复杂情况下(许多依赖项等),使用ShrinkWrap 创建EAR 会很烦人。 @Deployment 方法应该将测试 WAR 嵌入到 EAR 中,并将模块元素添加到现有的 application.xml 中,然后再将存档返回到 Arquillian 运行时。

@Deployment 方法示例:

...
@Deployment
public static Archive<?> createDeploymentPackage() throws IOException {
    final String testWarName = "test.war";

    final EnterpriseArchive ear = ShrinkWrap.createFromZipFile(
            EnterpriseArchive.class, new File("target/myApp.ear"));

    addTestWar(ear, myClassTest.class, testWarName);
...

Arquillian EJB-JAR/EAR testing examples

Arquillian EJB-JAR/EAR testing examples/Github


SO: How to add test classes to an imported ear file and run server side with arquillian?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    相关资源
    最近更新 更多