当前位置: 首页 > 面试题库 >

Java 在jUnit 4.x中套件执行前后的挂钩

单于骁
2023-03-14
问题内容

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

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


问题答案:

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

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



 类似资料:
  • 我有两个TestSuite类(和) 他们看起来是这样的: 如何并行运行它们?我运行一个这样的测试$mvn class test-Dtest=TestSuiteOne 但我如何同时运行它们呢?

  • 主要内容:1 概述,2 创建简单的Maven项目,3 项目包装结构,4 更新pom.xml文件中的JUnit依赖关系,5 创建LoginService.java和LoginServiceTest.java,,6.创建UserService.java和UserServiceTest.java,7 创建测试套件,8 结论1 概述 在本指南中,我们将学习如何一次运行多个测试类。将Suite用作运行程序可以使您手动构建一个包含许多类测试的套件。它等效于JUnit 3.8.x静态Test suite()方

  • 问题内容: 我不确定这是怎么回事。基本上,我有一个ASyncTask类,它在后台照常进行操作。完成后我想做点事。现在,在您继续说“只使用onPostExecute()”之前,有一个陷阱。我需要运行的方法是在活动中,而不是在Task类中。 我看到的方式有两种选择。 A: 我希望我可以这样做,因为它是如此的简单,可以让我检查任务何时完成,而不必经常轮询活动和getStatus()。我不认为我会很幸运,

  • 我已经筛选了一段时间堆栈上的答案,并且遇到了一些工作的例子,这些工作似乎完成了这一点,或者至少很接近。 在整个selenium套件中使用相同的web驱动程序 我所希望能够做的就是将selenium测试用例导出为JUnit4文件,将它们带入eclipse并根据需要进行修改,然后能够从测试套件中添加或删除它。当测试套件运行时,它应该打开一个Web驱动程序窗口并运行每个测试用例,就像它在基本Firefo

  • 我目前正在使用JUnit4.x和AssertJ。我想确保没有使用Hamcrest偷偷摸摸的。但是,Hamcrest核心是JUnit运行时必需的依赖项,请参见JUnit问题#1429:JUnit4.12关于org/Hamcrest/selfdescription#1429,因此直接从pom.xml中排除依赖项或调整类路径都不起作用。 如何确保测试不使用Hamcrest断言?我想在构建时使用Maven

  • 然而,这并不起作用,应用程序运行并不拾取这个挂载的属性文件,它使用的是封装在jar中的默认属性文件。但是当我进入已启动的容器并再次手动运行entrypoint cmd时,它通过拾取我挂载的文件而按预期工作。所以我想知道这是不是与mount如何使用entrypoint相关?或者我只是没有为这个案例正确地编写Dockerfile?