0

我正在使用 JUnit 4 来测试数据库应用程序。由于每个测试在运行之前都需要对数据库进行特殊的预设,因此我使用的是@Before先加载数据的@After方法和从数据库中删除所有数据的方法。由于某些原因,我不能使用 DBUnit,但我必须使用一些自定义 Java 实现来完成数据库加载和清理工作。虽然我可以从方法中的这个自定义实现创建一个类的实例,但在@Before方法中获得相同的实例很重要@After

我的第一个想法是myObject在测试类中使用一个字段(例如, )并在@Before方法中设置它,这样我就可以在@After方法中再次使用它。但是,我不确定 JUnit 生命周期以及当测试并行运行时它将如何表现,即是否myObject会被覆盖。

另一个想法是使用一个 JUnit ,它在方法TestWatcher中创建该对象的一个​​实例starting并将它也保存在一个字段中。然后我@Rule在我的测试类中使用通过实现中的getter方法访问这个实例TestWatcher

所以我的问题基本上是:

@Before1)在方法中预设数据库并删除方法中的所有数据是一种好习惯@After吗?所以如果下一个测试只需要加载少量数据,它会运行得更快。

2)如何访问在@After方法中创建的方法中对象的同一实例@Before。即使测试并行运行,也必须保证它是同一个实例。我的两个想法中的任何一个都是实现它的好方法,哪个更好?

谢谢!

4

1 回答 1

3
  1. 恕我直言,不。我在使用 DbSetup 时推荐的良好做法清除数据库并插入测试前的必要数据,测试后什么都不做。这样,您可以确定数据库在开始测试时包含您想要的内容(即使之前的测试未能清理),并且您可以在测试失败后检查数据库,以诊断问题。

  2. 使用一个字段。JUnit 为每个测试创建一个新的测试类实例。

于 2015-07-24T07:47:13.437 回答