在arquillian测试中使用shrinkWrap在部署jar中添加包

时间:2015-08-10 12:10:01

标签: java jboss ejb jboss-arquillian

我正在使用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()。我的项目中有数百个包。明显的代码大小将会大幅增加

还有其他办法吗?或者我必须犯一些大错误

2 个答案:

答案 0 :(得分:15)

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

addPackage(String pack)

addPackages(boolean recursive, String... packages)

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

.addPackages(true, "com.root")

答案 1 :(得分:0)

您可以使用应用的现有Me.UpdateCommand.Parameters.Add("@MiddleName", OleDb.OleDbType.VarChar, 50, "MiddleName").Value = If(Me.MiddleName = String.Empty, DBNull.Value, Me.MiddleName) ,因为在EAR/WAR/JAR创建EAR会在某些复杂情况下(许多依赖项等)令人讨厌。 ShrinkWrap方法应该将测试WAR嵌入到EAR中,并在将存档返回到Arquillian运行时之前将模块元素添加到现有@Deployment中。

application.xml方法示例:

@Deployment

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?