【问题标题】:arquillian + shrinkwrap + seam: how to create deployment packagearquillian + shrinkwrap + seam:如何创建部署包
【发布时间】:2016-11-01 14:29:52
【问题描述】:

我有一个 seam 2.2.2 应用程序,我正在迁移到 jboss eap 6 (AS7)。 由于测试是在旧的 jboss 嵌入式容器中进行的,所以我开始使用 arquillian 但我无法发现创建部署包的热点。

这是我的尝试之一:

@Deployment
@OverProtocol("Servlet 3.0") 
public static Archive<?> createDeployment() throws IOException {

    // Build the ear with Maven by hand before run the test!
    final EnterpriseArchive ear = ShrinkWrap.createFromZipFile(
           EnterpriseArchive.class, new File("../Sin-ear/target/Sin.ear"));

    final JavaArchive testjar = ShrinkWrap.createFromZipFile(
           JavaArchive.class, new File("./target/test.jar"));
    //final JavaArchive testjar = ShrinkWrap.create(JavaArchive.class, "test.jar") //other attempt
    //     .addPackages(true, "com.miles.knowledge.test");

    ear.addAsModule(testjar);
    return ear;
}

当我将测试类作为 JUnit 测试运行时它失败了(我可以看到应用程序部署没有错误):

java.lang.ClassNotFoundException: com.miles.knowledge.test.GreeterTest from [Module "deployment.Sin.ear.Sin.war:main" from Service Module Loader]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213)
    ...

看来我得把测试类打包成一个war包了,但是我有点迷茫,我需要一些帮助。

【问题讨论】:

    标签: jboss seam jboss-arquillian shrinkwrap


    【解决方案1】:

    这种部署应该可以工作(注意将测试类添加到战争中)...

    @RunWith(Arquillian.class)
    public class JsfTest extends org.jboss.seam.mock.JUnitSeamTest{
    
        @Deployment(name="UserLoginTest")
        @OverProtocol("Servlet 3.0") 
        public static Archive<?> createDeployment(){
    
            EnterpriseArchive er = Deployments.webAppDeployment();
            WebArchive web = er.getAsType(WebArchive.class, "WebApp-web.war");
            er.addAsModule(Testable.archiveToTest(web));
    
            web.addClasses(JsfTest.class)
                .addAsResource(EmptyAsset.INSTANCE, "seam.properties")
                .delete("/WEB-INF/web.xml");
            web.addAsWebInfResource("mock-web.xml", "web.xml");
    
            return er;
    
        }
    }
    
    public class Deployments {
       public static EnterpriseArchive webAppDeployment() {
           return ShrinkWrap.create(ZipImporter.class, "WebApp.ear")
               .importFrom(new File("../WebApp-ear/target/WebApp.ear"))
               .as(EnterpriseArchive.class);
       }
    }
    

    【讨论】:

    • 就是这样!谢啦!我花了一些时间才意识到如何加载正确的 cacheManager 配置,但您的提示是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多