Unit testing 在JUnit4测试中访问@Before和@After中对象的同一实例
我正在使用JUnit4测试数据库应用程序。由于每个测试在运行之前都需要对数据库进行特殊的预设,因此我使用Unit testing 在JUnit4测试中访问@Before和@After中对象的同一实例,unit-testing,junit4,database-testing,Unit Testing,Junit4,Database Testing,我正在使用JUnit4测试数据库应用程序。由于每个测试在运行之前都需要对数据库进行特殊的预设,因此我使用@before方法首先加载数据,然后使用@After方法从数据库中删除所有数据。由于某些原因,我不能使用DBUnit,但我必须使用一些定制的Java实现来完成数据库加载和清理的工作。虽然我可以在@Before方法中从这个自定义实现创建一个类的实例,但在@After方法中获得相同的实例是很重要的 我的第一个想法是在测试类中使用一个字段(例如,myObject),并在@Before方法中设置它,这
@before
方法首先加载数据,然后使用@After
方法从数据库中删除所有数据。由于某些原因,我不能使用DBUnit,但我必须使用一些定制的Java实现来完成数据库加载和清理的工作。虽然我可以在@Before
方法中从这个自定义实现创建一个类的实例,但在@After
方法中获得相同的实例是很重要的
我的第一个想法是在测试类中使用一个字段(例如,myObject
),并在@Before
方法中设置它,这样我就可以在@After
方法中再次使用它。但是,我不确定JUnit生命周期以及当测试并行运行时它将如何运行,即myObject
是否将被覆盖
另一个想法是使用JUnitTestWatcher
,它在starting
方法中创建此对象的实例,并将其保存在字段中。然后我在测试类中使用@Rule
,通过TestWatcher
实现中的getter方法访问这个实例
所以我的问题基本上是:
1) 在@Before
方法中预设数据库,并在@After
方法中删除所有数据,这是一种良好的做法吗?因此,如果下一个测试只需要加载少量数据,它将运行得更快
2) 如何在@After
方法中访问在@Before
方法中创建的对象的相同实例。必须保证它是同一个实例,即使测试并行运行。我的两个想法中有哪一个是实现它的好方法,哪一个更好
谢谢