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



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

还有其他方法吗?或者我一定是弄错了

我建议您使用字符串表示包路径:"com.root. "核心"等。还有一些方法:

addPackage(String pack)
addPackages(boolean recursive, String... packages)
我猜最新的

更适合您,因为它提供了递归添加包的可能性,从而避免重复包含每个包。例如:

.addPackages(true, "com.root")

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

@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测试示例

Arquillian EJB-JAR/EAR测试示例/Github


SO:如何将测试类添加到导入的ear文件并使用arquillian运行服务器端?

最新更新