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

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

  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测试用例中指定执行顺序 的全部内容, 来源链接: utcz.com/qa/426150.html

回到顶部