Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Arquillian:结合本地代码和容器代码_Java_Jboss_Jboss7.x_Jboss Arquillian - Fatal编程技术网

Java Arquillian:结合本地代码和容器代码

Java Arquillian:结合本地代码和容器代码,java,jboss,jboss7.x,jboss-arquillian,Java,Jboss,Jboss7.x,Jboss Arquillian,我正在与Arquillian一起使用JBoss7托管容器。我正在编写一个测试来执行以下操作: 在本地准备测试,而不是在JBoss服务器上 在JBoss服务器上运行测试 验证输出,而不是在JBoss服务器上 这是我的第一次尝试: @RunWith(Arquillian.class) public class NotWorking { @Inject private Service service; @Deployment public static Archi

我正在与Arquillian一起使用JBoss7托管容器。我正在编写一个测试来执行以下操作:

  • 在本地准备测试,而不是在JBoss服务器上
  • 在JBoss服务器上运行测试
  • 验证输出,而不是在JBoss服务器上
这是我的第一次尝试:

@RunWith(Arquillian.class)
public class NotWorking {
    @Inject
    private Service service;

    @Deployment
    public static Archive<?> createDeployment() {
        // ...
    }

    @Test
    public void testService() throws Exception {
        prepare();
        service.executeService();
        validate();
    }

    @RunAsClient
    public void prepare() throws Exception {
        LocalOnlyClass.prepare();
    }

    @RunAsClient
    public void validate() throws Exception {
        LocalOnlyClass.validate();
    }
}
@RunWith(Arquillian.class)
公共课不起作用{
@注入
私人服务;
@部署
公共静态存档createDeployment(){
// ...
}
@试验
public void testService()引发异常{
准备();
service.executeService();
验证();
}
@RunaClient
public void prepare()引发异常{
LocalOnlyClass.prepare();
}
@RunaClient
public void validate()引发异常{
LocalOnlyClass.validate();
}
}
不幸的是,这不起作用。Arquillian试图在服务器上运行准备和验证,但找不到LocalOnlyClass。我可以按如下方式让它工作,但它很难看:

@RunWith(Arquillian.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class Working {
    @Inject
    private Service service;

    @Deployment
    public static Archive<?> createDeployment() {
        // ...
    }

    @Test
    @RunAsClient
    public void testService1Prepare() throws Exception {
        LocalOnlyClass.prepare();
    }

    @Test
    public void testService2Test() throws Exception {
        service.executeService();
    }

    @Test
    @RunAsClient
    public void testService3Validate() throws Exception {
        LocalOnlyClass.validate();
    }
}
@RunWith(Arquillian.class)
@FixMethodOrder(MethodSorters.NAME\u升序)
公共阶级工作{
@注入
私人服务;
@部署
公共静态存档createDeployment(){
// ...
}
@试验
@RunaClient
public void testService1Prepare()引发异常{
LocalOnlyClass.prepare();
}
@试验
public void testService2Test()引发异常{
service.executeService();
}
@试验
@RunaClient
public void testService3Validate()引发异常{
LocalOnlyClass.validate();
}
}

有谁知道有更好的方法来避免“假”测试吗?

我不太确定你的评论:

不幸的是,这不起作用。阿奎利安试图经营这个公司 在服务器上进行准备和验证,但找不到 LocalOnlyClass


如果您的问题真的在于代码的执行位置,我不认为JUnits
@FixMethodOrder
会有什么不同。它只是强制执行测试的执行顺序。Arquillian的
@InSequence
注释也可以实现同样的效果,这是我在您的案例中推荐的注释。

谢谢您的评论。你说得很对,
@FixMethodOrder
本身并不能解决问题。解决方法是将
@RunAsClient
放在
@Test
方法而不是非测试方法周围。然后使用
@FixMethodOrder
以及测试的命名来确保一切都以正确的顺序运行。