`
sunxboy
  • 浏览: 2868778 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

How to use hsqldb to test DB operation

 
阅读更多

sometime we want to test dao operation in junit test, below we will use hsqldb to test it.

1. setup hsqldb configuation.

we have a persistent-config.xml like this:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
 

    <!-- import the dataSource definition -->
	<import resource="inverter-datasource-config.xml"/>
	<bean id="jpa.repo.statistic" class="com.eifesun.monitor.inverter.persistent.repository.jpa.JpaInverterRepositoryImpl">
	 	<property name="entityManager">
		 	<bean class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
	            <property name="persistenceUnitName" value="inverterdb" />
	        </bean>
        </property>
	</bean>

     <!-- enables scanning for @Transactional annotations -->
    <tx:annotation-driven />
 
	
	<!-- ==================		 3 Profiles to choose from 			=================== 
									- default (uses JPA)
									- jdbc (uses Spring" JdbcTemplate)
									- spring-data-jpa	
		  =============================================================================-->
	
        <!-- JPA EntityManagerFactory -->
        <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
              p:dataSource-ref="dataSource">
            <property name="jpaVendorAdapter">
                <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
                      p:database="${jpa.database}" p:showSql="${jpa.showSql}"/>
            </property>
            <!-- gDickens: BOTH Persistence Unit and Packages to Scan are NOT compatible, persistenceUnit will win -->
            <property name="persistenceUnitName" value="inverterdb"/>
            <property name="packagesToScan" value="com.eifesun.monitor.inverter.persistent"/>
        </bean>

        <!-- Transaction manager for a single JPA EntityManagerFactory (alternative to JTA) -->
        <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
              p:entityManagerFactory-ref="entityManagerFactory"/>
        <!--
            Post-processor to perform exception translation on @Repository classes (from native
            exceptions such as JPA PersistenceExceptions to Spring's DataAccessException hierarchy).
        -->
        <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>


        <!--
            Loads JPA beans
            Will automatically be transactional due to @Transactional.
            EntityManager will be auto-injected due to @PersistenceContext.
            PersistenceExceptions will be auto-translated due to @Repository.
        -->
        <context:component-scan base-package="com.eifesun.monitor.inverter.persistent.repository.jpa"/>

</beans>

 

2. setup cleanup() method to keep each test case isolated.

@After
    public void cleanup() throws SQLException {
        Statement databaseTruncationStatement = null;
        try {
            databaseTruncationStatement = localBean.getDataSource().getConnection().createStatement();
            databaseTruncationStatement.executeUpdate("TRUNCATE SCHEMA public AND COMMIT");
        }
        finally {
            databaseTruncationStatement.close();
        }
    }

 

3. write test case for each scenario.

   @Test
    public void whenCleanAllInverterTodayOutputEnergyThenAllTodayOutputEnergyWillBeZero() {
        // given
        String inverterId1 = "inverter1";
        String inverterId2 = "inverter2";
        buildAndSaveInverter(inverterId1, 80, 10, 11);
        buildAndSaveInverter(inverterId2, 90, 20, 22);

        // when
        inverterRepo.cleanAllInvertersTodayOutputEnergy();

        // then
        Inverter inverter1 = inverterRepo.findStoredInverter(inverterId1);
        assertThat(inverter1.getEnergyTotal(), equalTo(80L));
        assertThat(inverter1.getOutputPower(), equalTo(10L));
        assertThat(inverter1.getTodayOutputEnergy(), equalTo(0L));

        Inverter inverter2 = inverterRepo.findStoredInverter(inverterId2);
        assertThat(inverter2.getEnergyTotal(), equalTo(90L));
        assertThat(inverter2.getOutputPower(), equalTo(20L));
        assertThat(inverter2.getTodayOutputEnergy(), equalTo(0L));

    }

 

 

 

 

分享到:
评论

相关推荐

    hsqldb使用(转载)

    例如,启动名为`test`的数据库,命令为`java -cp hsqldb.jar org.hsqldb.Server -database.0 ./db/test -dbname.0 test`。通过JDBC,我们可以使用`jdbc:hsqldb:hsql://localhost:9002/test`连接到服务器。 - **In-...

    HSQLDB

    **HSQLDB(HyperSQL Database)详解** HSQLDB,全称HyperSQL数据库管理系统,是一款开源、轻量级、高性能的关系型数据库系统。它支持Java平台,并且完全遵循SQL标准,提供内存和磁盘两种存储方式,使得它适用于多种...

    hsqldb快速入门

    java -cp hsqldb.jar org.hsqldb.Server -database.0 ./db/test -dbname.0 test ``` JDBC连接方式: ```java Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9002/test", "sa", "...

    hsqldb 2.25

    **HSQldb 2.25 知识点详解** HSQldb,全称为HyperSQL Database,是一款开源、轻量级、嵌入式的关系型数据库管理系统。它支持标准的SQL语法,包括SQL-92和SQL:2003,且在Java环境中运行,无需依赖外部操作系统服务。...

    开源数据库软件hsqldb

    2. **连接数据库**:使用JDBC驱动进行连接,如`jdbc:hsqldb:hsql://localhost/test`,其中`test`是数据库名。 3. **创建表**:通过SQL语句`CREATE TABLE`定义表结构,如`CREATE TABLE Users (id INT PRIMARY KEY, ...

    HSQLDB快速连接数据库

    ### HSQLDB快速连接数据库 #### 一、HSQLDB简介与特点 HSQLDB(HyperSQL Database)是一款优秀的轻量级开源纯Java SQL数据库管理系统。它被设计为易于集成到现有的Java应用环境中,尤其适合那些对性能和资源消耗有...

    hsqldb-2.2.8数据库

    **HSQldb 2.2.8 数据库详解** HSQldb(HyperSQL Database)是一款高效、轻量级且开源的Java数据库管理系统,它在IT领域中被广泛应用于开发、测试以及小型应用环境。HSQldb完全用Java编写,因此具有良好的跨平台性,...

    hsqldb-2.5.0.jar

    hsqldb数据库下载,很好用,简易的内存数据库,特别适合初学者。

    hsqldb的最新版本

    HSQldb,全称HyperSQL Database,是一款开源的、轻量级的关系型数据库管理系统,尤其适合于嵌入式应用和开发测试环境。HSQldb完全用Java编写,因此具有跨平台性,能在任何支持Java的环境中运行,包括Windows操作系统...

    HSQLDB中文帮助文档

    ### HSQLDB中文帮助文档知识点总结 #### 一、HSQLDB概述 - **定义**:HSQLDB(HyperSQL Database)是一款轻量级、开源的纯Java SQL数据库管理系统。它能够作为嵌入式数据库使用,也可以作为一个独立的服务器运行。 ...

    hsqldb-lib.zip

    《HSQldb与Java数据库连接详解》 HSQldb(HyperSQL Database)是一款开源、轻量级、嵌入式的关系型数据库管理系统,广泛应用于Java应用程序中。它支持SQL标准,提供单用户和多用户模式,并且可以运行在内存中或磁盘...

    HSQLDB.zip

    在上述代码中,我们设置了数据库URL(jdbc:hsqldb:hsql://localhost/test),用户(sa)和默认密码(空字符串)。`JDBCDataSource.getConnection()`方法用于建立与数据库的连接。 描述中提到的"TestByJDBC设置参数...

    hsqldb jdbc driver

    hsqldb jdbc driver适合于hsqldb

    hsqldb demo

    **HSQldb 概述** HSQldb,全称 HyperSQL Database,是一个开源、轻量级、完全Java编写的数据库管理系统。它支持多种数据库模式,包括纯内存储存、文件系统存储以及网络服务器模式,使其在多种场景下都能发挥效用。...

    HSQLDB 1.8.0

    《HSQLDB 1.8.0:轻量级数据库引擎的深度剖析》 HSQLDB,全称为HyperSQL Database,是一款开源、轻量级、高性能的关系型数据库管理系统,广泛应用于嵌入式系统和测试环境。HSQLDB 1.8.0是该数据库引擎的一个重要...

    test-db-in-memory:在内存中使用db进行简单测试,例如HSQLDB和H2

    文件名列表中的"test-db-in-memory-master"可能包含了一个完整的示例项目,展示了如何集成HSQLDB或H2到Java测试框架中,如JUnit或TestNG。这个项目可能包含了配置文件、数据库脚本、测试类以及其他相关的资源文件,...

    hsqldb-1.7.1.jar

    数据库连接 hsqldb1.7.1.jar

Global site tag (gtag.js) - Google Analytics