Junit 测试java应用程序,数据库层,数据库,执行sql脚本

Junit 测试java应用程序,数据库层,数据库,执行sql脚本,junit,Junit,我需要使用Junit为java应用程序编写单元测试用例 我曾想过使用嵌入式数据库,如H2,但我面临的挑战是,我有多个测试类,我想编写一个sql脚本文件,用于创建表和初始化测试数据库的数据 但是我们如何确保它在任何测试用例之前只运行一次呢 如果有多个测试类,我们不能在@BeforeClass方法中的每个测试类中编写这些脚本 应该有别的办法。我的应用程序使用OracleDB,但为了进行测试,我考虑使用H2 任何建议都将不胜感激 1)与在测试套件开始时运行一次的@BeforeClass一样,在每次测试

我需要使用Junit为java应用程序编写单元测试用例

我曾想过使用嵌入式数据库,如
H2
,但我面临的挑战是,我有多个测试类,我想编写一个sql脚本文件,用于创建表和初始化测试数据库的数据

但是我们如何确保它在任何测试用例之前只运行一次呢

如果有多个测试类,我们不能在
@BeforeClass
方法中的每个测试类中编写这些脚本

应该有别的办法。我的应用程序使用OracleDB,但为了进行测试,我考虑使用H2

任何建议都将不胜感激

1)与在测试套件开始时运行一次的
@BeforeClass
一样,在每次测试之前也会运行一次
@BeforeClass

2) 如果您正在对某个类/某段代码进行单元测试,那么最好的做法是不要使用真实的DB,而是使用一个模拟DB,将其注入正在测试的代码并设置其行为。一个流行的模拟框架是

所以你可以这样做:

when(carsRepository.findById(id)).thenReturn(null);
when(carsRepository.findAllByCustomerName(customerName)).thenReturn(someCars);

我想测试我的数据库层,因此无法执行您的建议。Plus@BeforeClass/@Before将在每个类/方法之前运行脚本。我希望它们只执行一次,因为它将使模式为执行测试做好准备,