为了账号安全,请及时绑定邮箱和手机立即绑定

在jUnit 4.x中执行Suite之前和之后的挂钩

/ 猿问

在jUnit 4.x中执行Suite之前和之后的挂钩

慕丝7291255 2019-09-21 14:45:39

我正在尝试使用jUnit 4.4执行一组集成测试的设置和拆卸。拆卸需要可靠地运行。我在使用TestNG时遇到其他问题,因此我希望移植回jUnit。在运行任何测试之前以及在完成所有测试之后,可以使用哪些挂钩执行?

注意:我们正在使用Maven 2进行构建。我已经尝试过使用maven的pre-post-integration-test阶段,但是,如果测试失败,则maven会停止并且不会运行post-integration-test,这没有帮助。


查看完整描述

3 回答

?
大话西游666

是的,可以在测试套件中进行任何测试之前和之后可靠地运行设置和拆卸方法。让我用代码演示:


package com.test;


import org.junit.AfterClass;

import org.junit.BeforeClass;

import org.junit.runner.RunWith;

import org.junit.runners.Suite;

import org.junit.runners.Suite.SuiteClasses;


@RunWith(Suite.class)

@SuiteClasses({Test1.class, Test2.class})

public class TestSuite {


    @BeforeClass

    public static void setUp() {

        System.out.println("setting up");

    }


    @AfterClass

    public static void tearDown() {

        System.out.println("tearing down");

    }


}

因此,您的Test1类看起来像:


package com.test;


import org.junit.Test;



public class Test1 {

    @Test

    public void test1() {

        System.out.println("test1");

    }


}

...并且您可以想象Test2看起来很相似。如果运行TestSuite,您将获得:


setting up

test1

test2

tearing down

因此,您可以看到设置/拆卸仅分别在所有测试之前和之后运行。


要点:仅当您运行测试套件,而不是将Test1和Test2作为单独的JUnit测试运行时,此方法才有效。您提到您正在使用maven,并且maven surefire插件喜欢单独运行测试,而不是套件的一部分。在这种情况下,我建议创建一个每个测试类都可以扩展的超类。然后,超类包含带注释的@BeforeClass和@AfterClass方法。尽管不如上面的方法那么干净,但我认为它将为您服务。


至于失败测试的问题,可以设置maven.test.error.ignore,以便在失败测试中继续构建。不建议您将其作为持续的实践,但是在所有测试通过之前,它应该可以使您正常运行。有关更多详细信息,请参见maven surefire文档。


查看完整回答
反对 回复 2019-09-21
?
一只斗牛犬

我的一位同事提出了以下建议:您可以使用自定义RunListener并实现testRunFinished()方法:http ://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html#testRunFinished(org 。 junit.runner.Result)


要注册RunListener,只需按照以下方式配置surefire插件:http ://maven.apache.org/surefire/maven-surefire-plugin/examples/junit.html 部分“使用自定义侦听器和报告器”


故障安全插件也应选择此配置。这个解决方案很棒,因为您不必指定套件,查找测试类或任何此类东西-它使Maven可以发挥其魔力,等待所有测试完成。


查看完整回答
反对 回复 2019-09-21
?
至尊宝的传说

使用注释,您可以执行以下操作:


import org.junit.*;

import static org.junit.Assert.*;

import java.util.*;


class SomethingUnitTest {

    @BeforeClass

    public static void runBeforeClass()

    {


    }


    @AfterClass

    public static void runAfterClass()

    {  


    }


    @Before  

    public void setUp()

    {


    }


    @After

    public void tearDown()

    {


    }


    @Test

    public void testSomethingOrOther()

    {


    }


}


查看完整回答
反对 回复 2019-09-21

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信