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)); }
相关推荐
例如,启动名为`test`的数据库,命令为`java -cp hsqldb.jar org.hsqldb.Server -database.0 ./db/test -dbname.0 test`。通过JDBC,我们可以使用`jdbc:hsqldb:hsql://localhost:9002/test`连接到服务器。 - **In-...
**HSQLDB(HyperSQL Database)详解** HSQLDB,全称HyperSQL数据库管理系统,是一款开源、轻量级、高性能的关系型数据库系统。它支持Java平台,并且完全遵循SQL标准,提供内存和磁盘两种存储方式,使得它适用于多种...
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,全称为HyperSQL Database,是一款开源、轻量级、嵌入式的关系型数据库管理系统。它支持标准的SQL语法,包括SQL-92和SQL:2003,且在Java环境中运行,无需依赖外部操作系统服务。...
2. **连接数据库**:使用JDBC驱动进行连接,如`jdbc:hsqldb:hsql://localhost/test`,其中`test`是数据库名。 3. **创建表**:通过SQL语句`CREATE TABLE`定义表结构,如`CREATE TABLE Users (id INT PRIMARY KEY, ...
### HSQLDB快速连接数据库 #### 一、HSQLDB简介与特点 HSQLDB(HyperSQL Database)是一款优秀的轻量级开源纯Java SQL数据库管理系统。它被设计为易于集成到现有的Java应用环境中,尤其适合那些对性能和资源消耗有...
**HSQldb 2.2.8 数据库详解** HSQldb(HyperSQL Database)是一款高效、轻量级且开源的Java数据库管理系统,它在IT领域中被广泛应用于开发、测试以及小型应用环境。HSQldb完全用Java编写,因此具有良好的跨平台性,...
hsqldb数据库下载,很好用,简易的内存数据库,特别适合初学者。
HSQldb,全称HyperSQL Database,是一款开源的、轻量级的关系型数据库管理系统,尤其适合于嵌入式应用和开发测试环境。HSQldb完全用Java编写,因此具有跨平台性,能在任何支持Java的环境中运行,包括Windows操作系统...
### HSQLDB中文帮助文档知识点总结 #### 一、HSQLDB概述 - **定义**:HSQLDB(HyperSQL Database)是一款轻量级、开源的纯Java SQL数据库管理系统。它能够作为嵌入式数据库使用,也可以作为一个独立的服务器运行。 ...
《HSQldb与Java数据库连接详解》 HSQldb(HyperSQL Database)是一款开源、轻量级、嵌入式的关系型数据库管理系统,广泛应用于Java应用程序中。它支持SQL标准,提供单用户和多用户模式,并且可以运行在内存中或磁盘...
在上述代码中,我们设置了数据库URL(jdbc:hsqldb:hsql://localhost/test),用户(sa)和默认密码(空字符串)。`JDBCDataSource.getConnection()`方法用于建立与数据库的连接。 描述中提到的"TestByJDBC设置参数...
hsqldb jdbc driver适合于hsqldb
**HSQldb 概述** HSQldb,全称 HyperSQL Database,是一个开源、轻量级、完全Java编写的数据库管理系统。它支持多种数据库模式,包括纯内存储存、文件系统存储以及网络服务器模式,使其在多种场景下都能发挥效用。...
《HSQLDB 1.8.0:轻量级数据库引擎的深度剖析》 HSQLDB,全称为HyperSQL Database,是一款开源、轻量级、高性能的关系型数据库管理系统,广泛应用于嵌入式系统和测试环境。HSQLDB 1.8.0是该数据库引擎的一个重要...
文件名列表中的"test-db-in-memory-master"可能包含了一个完整的示例项目,展示了如何集成HSQLDB或H2到Java测试框架中,如JUnit或TestNG。这个项目可能包含了配置文件、数据库脚本、测试类以及其他相关的资源文件,...
数据库连接 hsqldb1.7.1.jar