Unit testing 在JUnit4测试中访问@Before和@After中对象的同一实例

Unit testing 在JUnit4测试中访问@Before和@After中对象的同一实例,unit-testing,junit4,database-testing,Unit Testing,Junit4,Database Testing,我正在使用JUnit4测试数据库应用程序。由于每个测试在运行之前都需要对数据库进行特殊的预设,因此我使用@before方法首先加载数据,然后使用@After方法从数据库中删除所有数据。由于某些原因,我不能使用DBUnit,但我必须使用一些定制的Java实现来完成数据库加载和清理的工作。虽然我可以在@Before方法中从这个自定义实现创建一个类的实例,但在@After方法中获得相同的实例是很重要的 我的第一个想法是在测试类中使用一个字段(例如,myObject),并在@Before方法中设置它,这

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

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

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

所以我的问题基本上是:

1) 在
@Before
方法中预设数据库,并在
@After
方法中删除所有数据,这是一种良好的做法吗?因此,如果下一个测试只需要加载少量数据,它将运行得更快

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

谢谢

  • IMHO,不是。我建议在使用DbSetup时(请参阅以获得更详细的解释),最好的做法是在测试之前清除数据库并插入必要的数据,而在测试之后什么也不做。这样,您可以确保数据库在启动测试时完全包含您想要的内容(即使前一个测试未能清理),并且您可以在测试失败后检查数据库,以便诊断问题

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

  • IMHO,不是。我建议在使用DbSetup时(请参阅以获得更详细的解释),最好的做法是在测试之前清除数据库并插入必要的数据,而在测试之后什么也不做。这样,您可以确保数据库在启动测试时完全包含您想要的内容(即使前一个测试未能清理),并且您可以在测试失败后检查数据库,以便诊断问题

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

  • IMHO,不是。我建议在使用DbSetup时(请参阅以获得更详细的解释),最好的做法是在测试之前清除数据库并插入必要的数据,而在测试之后什么也不做。这样,您可以确保数据库在启动测试时完全包含您想要的内容(即使前一个测试未能清理),并且您可以在测试失败后检查数据库,以便诊断问题

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

  • IMHO,不是。我建议在使用DbSetup时(请参阅以获得更详细的解释),最好的做法是在测试之前清除数据库并插入必要的数据,而在测试之后什么也不做。这样,您可以确保数据库在启动测试时完全包含您想要的内容(即使前一个测试未能清理),并且您可以在测试失败后检查数据库,以便诊断问题

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