gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:55:39 40 4
gpt4 key购买 nike

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

  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
}
}

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

最佳答案

您的这种情况很尴尬,因为为了隔离测试而不断重复工作感觉很糟糕(见下文) - 但请注意,大部分重复工作都可以提取到 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
}

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

在可能的情况下,为每个测试使用一个新实例,或者删除数据,理想情况下以尽可能简单的方式 - 例如对于数据库,删除整个表比删除可能意外出错的非常具体的删除更有可能成功。

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

关于java - 在 JUnit 测试用例中指定执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9528581/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com