当前位置:  开发笔记 > 编程语言 > 正文

在jUnit 4.x中执行套件执行挂钩之前和之后

如何解决《在jUnit4.x中执行套件执行挂钩之前和之后》经验,为你挑选了4个好方法。

我正在尝试使用jUnit 4.4执行测试,为一组集成测试执行设置和拆解.拆卸需要可靠运行.我在使用TestNG时遇到了其他问题,所以我想回到jUnit.在运行任何测试之前以及所有测试完成之后,可以执行哪些挂钩?

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



1> Julie..:

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

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文档.


对于necro感到抱歉 - 但是将BeforeClass/AfterClass添加到超类中并不能按预期工作 - 在每个测试类完成后仍会调用它们.这是为后代.
这仍然是一种有效的方法吗?如何避免在SuiteClasses注释中枚举测试类列表?
一旦我进入maven-surefire-plugin并创建了一个指向我想要运行的套件的包含列表,这对我来说非常有效.

2> Martin Vysny..:

我的一位同事建议如下:您可以使用自定义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发挥其魔力,等待所有测试完成.


+1这是我见过的第一个可用的解决方案,没有套房类的繁琐维护!

3> Sled..:

你可以在JUnit 4.9+中使用@ClassRule注释,正如我在回答另一个问题时所描述的那样.



4> 小智..:

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

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()
    {

    }

}


每次运行需要执行一次设置和拆卸.这只有在所有测试都在一个类中时才有用.
推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有