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

在JUnit测试用例中指定执行顺序

卫弘义
2023-03-14
问题内容

我有一个测试用例,其中添加了一个实体,对其进行了更新并删除了该实体。因此,执行顺序在这里很重要。我希望它是:

  1. 创造
  2. 更新资料
  3. 删除

奇怪的是,对于仅一个测试用例(15个测试用例),JUnit按以下顺序执行它:

  1. 删除
  2. 更新资料
  3. 创造 。

如何告诉JUnit按特定顺序执行它们?在其他情况下,JUnit可以正常工作(串行执行)。在这种情况下,为什么JUnit表现怪异?

以下相关代码段:

    private static Date date;
    private static int entity;
    static Parking p;
    public ParkingTests(String name) {
       super(name);
    }
    public void testAdd() throws Exception {
           //Add code here
    }
    public void testUpdate() throws Exception {
            //update code here
    }
    public void testDelete() throws Exception {
            //delete code here
    }
  }

变得奇怪了。作为套件的一部分,我运行了很多测试用例。如果我只运行停车箱,则订单保持不变。如果我和其他人一起运行它,它有时会得到维护,有时不会!


问题答案:

你这样的情况 尴尬的,因为它让你感觉很糟,保持重复工作,以隔离测试(见下文)
-但是请注意,大多数重复数据删除的可拉出成setUptearDown@Before@After)的方法,所以你不需要很多额外的代码。如果测试运行的速度不是很慢,以至于您经常停止运行它们,那么最好以干净测试的名义浪费一些CPU。

public void testAdd() throws Exception {
      // wipe database
      // add something
      // assert that it was added
}
public void testUpdate() throws Exception {
      // wipe database
      // add something
      // update it
      // assert that it was updated
}
public void testDelete() throws Exception {
      // wipe database
      // add something
      // delete it
      // assert that it was deleted
}

另一种方法是将所有内容放入带有多个断言的一个测试中,但这很难理解和维护,并且在测试失败时给出的信息也更少:

public void testCRUD() throws Exception {
      // wipe database
      // add something
      // assert that it was added
      // update it
      // assert that it was updated
      // delete it 
      // assert that it was deleted
}

使用数据库或集合或任何类型的存储进行测试是棘手的,因为一个测试始终会通过在数据库/集合中留下垃圾来影响其他测试。即使您的测试没有明确地相互依赖,它们仍然可能相互干扰,尤其是其中一项失败时。

在可能的情况下,最好在每个测试中使用一个新实例,或擦除数据,理想情况下,以一种尽可能简单的方式进行操作-
例如,对于数据库,擦除整个表的成功率要比非常具体的删除操作更可能成功,否则您可能会意外弄错。

更新 :通常最好在测试开始时擦除数据,因此一次失败的测试运行不会影响下一次运行。



 类似资料:
  • 问题内容: 假设JUnit按顺序执行测试用例是否合理:测试用例在下一个测试用例开始之前结束。JUnit版本之间是否有所不同(我的优先级在JUnit4上)?如果没有,是否有一种简单的方法可以强制JUnit按顺序执行测试? 谢谢 问题答案: 是的,默认情况下,我相信它会按顺序运行测试。 JUnit 4.6引入了一个实验来并行运行测试- 我不知道它的当前状态。我希望并行机制在默认情况下仍保持“选择加入”

  • 目前,我正在测试一个具有CRUD操作的类(例如)。按照后面使用的方法,我想按照创建、读取、更新和删除的顺序测试所有操作。 由于JUnit中测试用例的执行顺序依赖于JVM,所以我需要一些适当的方法来确保单元测试用例按照给定的顺序执行。 到目前为止,我提出了以下策略: > 在JUnit4中使用按名称的升序执行方法。然而,这需要重命名测试用例,而且对我来说似乎不是最好的方法,因为在未来需要添加更多的测试

  • 问题内容: 我想选择执行JUnit测试的顺序。我有4个带有几种测试方法的类,我的目标是执行,例如,类A的方法Y,然后是类B的方法X,最后是类A的方法Z。 你能帮忙吗? 问题答案: 通常,您不能指定单独的单元测试的运行顺序(尽管您可以在TestNG中指定优先级,并且每个测试的优先级都不同)。但是,单元测试应该能够独立运行,因此测试的顺序无关紧要。这是一个坏习惯。如果需要按特定顺序进行测试,则应重新考

  • 问题内容: 我在NetBeans 8.2中的一个新的干净Maven项目中创建了此测试: 如果我运行测试,日志显示 我的pom.xml包含以下依赖项: 是什么导致JUnit 5忽略测试方法? 更新:我添加了surefire插件,这是完整的pom.xml: 输出更改为: 并且surefire-reports文件夹包含两个“ .dump”文件。第一个内容: 问题答案: 确保将您的配置正确地设置为: 而且

  • 问题内容: 我正在使用pytest。我的目录中有两个文件。在其中一个文件中,有一个长时间运行的测试用例,它会生成一些输出。在另一个文件中,有一个测试用例读取该输出。如何确保两个测试用例的正确执行顺序?除了以适当的顺序将测试用例放入同一文件之外,还有其他选择吗? 问题答案: 通常,您可以使用其明确指定的hook来配置pytest基本上任何部分的行为。 对于您的情况,您需要“ pytest_colle