针对类中的每个测试方法触发的Arquillian BeforeClass和AfterClass事件

时间:2015-10-21 21:37:58

标签: java events java-ee jboss-arquillian

我正在开发一个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

我是否正确地理解了BeforeClass和AfterClass事件应该只为该类触发一次?如果是这样,我做错了导致每个测试方法触发事件?如果没有,Arquillian会提供任何可以观察到的事件来达到这个目的。我已经尝试过查看BeforeSuite和AfterSuite事件,但是每个测试方法都会触发它们。

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

0 个答案:

没有答案
相关问题