如何在Java项目中运行所有junit之前加载HSQL DB一次

时间:2015-11-30 11:46:03

标签: java hibernate maven junit

我的项目不是基于Spring的。它是一个带有Hibernate.Building工具的java - Maven。

我在运行junits之前将数据从一个数据库加载到HSQL DB。

我的数据库工具类:

public class DatabaseUtil {
    SchemaLoad schemaLoad = new SchemaLoad();
    DataLoad dataLoad = new DataLoad();
    boolean dataLoaded = false;

    static final String filename1 = "test1.txt";
    static final String filename2 = "text2.txt";

    void dbLoad() throws SQLException {
        if (!dataLoaded) {
            schemaLoad.cloneSchema(filename1);
            dataLoad.exportData(filename2);
            System.out.println("***********executed**********8");
            dataLoaded = true;
        }
    }
}

第一个测试用例:

public class TestCase {

    TrainRepository trainRepository = new TrainRepositoryImpl();
    DatabaseUtil databaseUtil = new DatabaseUtil();

    @BeforeClass
    private void setUp() throws SQLException {
        databaseUtil.dbLoad();

    }

    @Test
    private void positiveTestCaseForTrainRepo() throws Exception {

        //TestCases
    }

第二个测试用例:

公共类TestCase1 {

AirRepository airRepository = new AirRepositoryImpl();
DatabaseUtil databaseUtil = new DatabaseUtil();

@BeforeClass
private void setUp() throws SQLException {
    databaseUtil.dbLoad();

}

@Test
private void positiveTestCaseForAirRepo() throws Exception {

    //TestCases
}

两个测试用例都运行正常。但是它正在执行databaseUtil.dbLoad();每个junit的方法。

我的问题是我只需要加载数据库一次,即在第一个junit开始之前需要设置一些指示符。进一步的junits需要检查数据库实例如果数据库实例在那里它不应该加载数据,即DatabaseUtil类需要单身。

在mvn安装阶段,所有junits都通过maven suffire插件运行。

请帮助我实现这一目标。

2 个答案:

答案 0 :(得分:0)

每次都会调用void dbLoad()。

然后使用静态变量来跟踪

static boolean dataLoaded = false;

答案 1 :(得分:0)

如果你不使用spring,你需要自己实现缓存。你有几个选择。使用静态字段与某种同步(如果您使用/计划使用线程)。另一个选择是切换到提供@BeforeGroup功能的te​​stng,这样你就可以标记所有的db测试并在之前运行初始化。