【问题标题】:Do we have a @beforeTests method which can run once, before all the tests starts在所有测试开始之前,我们是否有一个可以运行一次的 @beforeTests 方法
【发布时间】:2012-09-16 02:06:02
【问题描述】:

在Junit中,我知道有@beforeclass,@before注解,我们有注解还是设计, 允许我们编写一个在整个测试过程之前只运行一次的方法吗?

我们有一个脚本,它为测试设置一些数据库数据(配置、静态、查找表等.....),但是在每个单独的测试之前运行它太贵了,我们希望它设置它,在开始运行任何测试之前只有一次。

谢谢!

【问题讨论】:

  • 嗨,我不明白@ BeforeClass db 连接有什么问题,甚至是文档中给出的示例。如果您的测试类有一些基类,根据文档将@BeforeClass 放在那里会很方便超类的@BeforeClass 方法将在当前类之前运行。
  • 获取@BeforeSuite / @AfterSuite 注释是一项经常被请求的功能,我建议您通过电子邮件发送 JUnit 邮件列表并在其中提及您的兴趣。

标签: unit-testing maven junit junit4 junit3


【解决方案1】:

DBUnit 提供您正在寻找的东西。它只是一个 JUnit 扩展。

  • 它具有诸如 Clean_Insert 之类的设置操作选项 - 这意味着将清理数据库并自动插入所需的数据。以及许多其他功能,例如刷新、更新、插入等
  • 事件更简单 - 为了使用 Dbunit,您不需要扩展 DBTestCase 类。您可以覆盖标准的JUnit setUp() 方法并在您的数据库上执行所需的操作。
  • 数据库配置操作
  • 数据集上有很多选项 - flat、xml、database、streaming

【讨论】:

  • 我猜 DBUnit 可以在每个测试方法或测试类之前运行。它是否支持在所有测试之前只运行一次。如果是,请你举个例子。
  • Junit 是关于设置测试数据、测试和清理测试数据 PER 测试。由于它是单元测试,因此每个测试都负责设置测试所需的数据。完成测试后对其进行清理非常重要,因为此类数据可能会造成混乱,干扰其他测试的结果,并可能最终永远留在那里。
  • 是的,它没有标准的方式来做你需要的事情(比如注释@beforeSuite)。但我们可以按如下方式完成,创建 2 个测试用例。 1) 第一个测试用例的 setup() - 将包含上面第 2 点中提到的代码。并测试数据是否填充 2)第二个测试用例负责清除所有测试数据并测试它是否已被清除。在所有测试之前运行第一个测试,在所有测试之后运行第二个。
【解决方案2】:

既然你用maven 标记了你的问题,我会这样:你可以使用pre-integration-test 阶段来运行这个一次性昂贵的脚本(对称地,你在post-integration-test 中清理)。

您可以为此使用 exec-maven-plugin:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>...</version>
  <executions>
    <execution>
      <id>some-execution</id>
      <phase>pre-integration-test</phase>
      <goals>
        <goal>exec</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <executable><!-- runnable command or file name here --></executable>
  </configuration>
</plugin> 

JUnit 没有这种注解,因为它不对环境做任何假设:它的目标是以隔离的方式一次测试一个类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-16
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2019-06-07
    • 2012-01-04
    • 1970-01-01
    相关资源
    最近更新 更多