Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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_Events_Jakarta Ee_Jboss Arquillian - Fatal编程技术网

Java 为类中的每个测试方法激发的Arquillian类前和类后事件

Java 为类中的每个测试方法激发的Arquillian类前和类后事件,java,events,jakarta-ee,jboss-arquillian,Java,Events,Jakarta Ee,Jboss Arquillian,我正在开发一个Arquillian扩展,需要观察BeforeClass和AfterClass事件,我发现这些事件是为每个用@Test注释的方法触发的 这些事件的JavaDoc声明在类执行之前/之后触发事件,因此我的理解是,对于整个类,这些事件只会触发一次,但是这不是我看到的 为了重现这个问题,我创建了以下非常简化的测试类 @RunWith(Arquillian.class) public class BeanStalkIt { @Deployment public static

我正在开发一个Arquillian扩展,需要观察BeforeClass和AfterClass事件,我发现这些事件是为每个用@Test注释的方法触发的

这些事件的JavaDoc声明在类执行之前/之后触发事件,因此我的理解是,对于整个类,这些事件只会触发一次,但是这不是我看到的

为了重现这个问题,我创建了以下非常简化的测试类

@RunWith(Arquillian.class)
public class BeanStalkIt {

    @Deployment
    public static WebArchive createDeployment() {
        WebArchive war = ShrinkWrap.create(WebArchive.class);

        return war;
    }

    @Test
    public void testFee() {
        assertTrue(true);
    }

    @Test
    public void testFi() {
        assertTrue(true);
    }

    @Test
    public void testFo() {
        assertTrue(true);
    }

    @Test
    public void testFum() {
        assertTrue(true);
    }
观察事件的课程如下:

public class TestLifecycle {

    public void beforeClass(@Observes BeforeClass beforeClassEvent) {
        System.out.println("BeforeClass event fired! " + beforeClassEvent.getTestClass().getName());
    }

    public void beforeTest(@Observes Before beforeTestEvent) {
        System.out.println("Before event fired! " + beforeTestEvent.getTestMethod().getName());
    }

    public void afterTest(@Observes After afterTestEvent) {
        System.out.println("After event fired! " + afterTestEvent.getTestMethod().getName());
    }

    public void afterClass(@Observes AfterClass afterClassEvent) {
        System.out.println("AfterClass event fired! " + afterClass.getTestClass().getName());
    }
}
BeforeClass event fired! integrationtest.BeanStalkIt
Before event fired! testFee
After event fired! testFee
AfterClass event fired! integrationtest.BeanStalkIt
BeforeClass event fired! integrationtest.BeanStalkIt
Before event fired! testFum
After event fired! testFum
AfterClass event fired! integrationtest.BeanStalkIt
BeforeClass event fired! integrationtest.BeanStalkIt
Before event fired! testFi
After event fired! testFi
AfterClass event fired! integrationtest.BeanStalkIt
BeforeClass event fired! integrationtest.BeanStalkIt
Before event fired! testFo
After event fired! testFo
AfterClass event fired! integrationtest.BeanStalkIt
触发事件时的输出如下所示:

public class TestLifecycle {

    public void beforeClass(@Observes BeforeClass beforeClassEvent) {
        System.out.println("BeforeClass event fired! " + beforeClassEvent.getTestClass().getName());
    }

    public void beforeTest(@Observes Before beforeTestEvent) {
        System.out.println("Before event fired! " + beforeTestEvent.getTestMethod().getName());
    }

    public void afterTest(@Observes After afterTestEvent) {
        System.out.println("After event fired! " + afterTestEvent.getTestMethod().getName());
    }

    public void afterClass(@Observes AfterClass afterClassEvent) {
        System.out.println("AfterClass event fired! " + afterClass.getTestClass().getName());
    }
}
BeforeClass event fired! integrationtest.BeanStalkIt
Before event fired! testFee
After event fired! testFee
AfterClass event fired! integrationtest.BeanStalkIt
BeforeClass event fired! integrationtest.BeanStalkIt
Before event fired! testFum
After event fired! testFum
AfterClass event fired! integrationtest.BeanStalkIt
BeforeClass event fired! integrationtest.BeanStalkIt
Before event fired! testFi
After event fired! testFi
AfterClass event fired! integrationtest.BeanStalkIt
BeforeClass event fired! integrationtest.BeanStalkIt
Before event fired! testFo
After event fired! testFo
AfterClass event fired! integrationtest.BeanStalkIt
我是否正确地理解了课前和课后事件只应该为班级触发一次?如果是这样,我做错了什么,导致每个测试方法都触发事件?如果没有,Arquillian是否提供了任何可以观察到的事件来实现此目的。我试过查看BeforeSuite和AfterSuite事件,但它们也适用于每种测试方法

我使用的是Maven Arquillian BOM版本1.1.10.Final,容器是GlassFish 4.1和Weld版本2.2.2的远程实例