Unitils H2 测试基础设施

1. 为什么使用Unitils H2

  • 1.1 DAO(REPOSITORY) 层的业务需要做测试,可以直接测试出SQL存在的问题,返回的结果是否是自己想要的。
  • 1.2 使用H2 避免了测试需要数据库的情况,也就是间接性的做到了数据的隔离,使得测试程序在跑的时候不受外部因素的影响,从而影响了怎么测试结果。当然H2和各个数据库的兼容需要大家好好考虑,但是大部分的情况都是兼容

2. 需要引入的jar

  • 2.1 Unitils H2 maven配置 我使用spring boot框架来作为测试
    版本 3.4.2

        
            com.h2database
            h2
        
        
            org.unitils
            unitils-core
            ${unitils.version}
        
        
            org.unitils
            unitils-io
            ${unitils.version}
        
        
            org.unitils
            unitils-spring
            ${unitils.version}
        
        
            org.unitils
            unitils-dbunit
            ${unitils.version}
        
        
            org.unitils
            unitils-dbmaintainer
            ${unitils.version}
            
                
                    org.hibernate
                    hibernate
                
                
                    org.slf4j
                    slf4j-nop
                
            
        
        
            org.assertj
            assertj-core
            ${assertj.version}
            test
        
  • 2.2 unitils-local.properties 配置
database.driverClassName=org.h2.Driver
database.url=jdbc:h2:mem:test
database.userName=123
database.password=123
DatabaseModule.Transactional.value.default=disabled
database.dialect=h2
database.schemaNames=public
updateDataBaseSchema.enabled=true
dbMaintainer.fromScratch.enabled=true
dbMaintainer.dbVersionSource.autoCreateVersionTable=true
dbMaintainer.autoCreateExecutedScriptsTable=true
dbMaintainer.keepRetryingAfterError.enabled=true
dbMaintainer.cleanDb.enabled=true
##建表语句
dbMaintainer.script.locations=src/test/resources/database/schema/schema.ddl
dbMaintainer.generateDataSetStructure.enabled=true
dataSetStructureGenerator.xsd.dirName=src/test/resources/database/xsd
  • 2.3 application.properties 配置
spring.datasource.url=jdbc:h2:mem:test
spring.datasource.username=123
spring.datasource.password=123
spring.datasource.driver-class-name=org.h2.Driver
  • 2.4 UnitilsH2TestApplication 代码
@PropertySource("classpath:/application.properties")
@MapperScan("com.example.unitilsh2test.domain.infrastructure.model")
@ComponentScan("com.example.unitilsh2test.domain.infrastructure")
@SpringBootApplication
public class UnitilsH2TestApplication {
}
  • 2.5 UnitilsH2TestApplicationTests 代码 这个抽象类很重要 以后所有的test 类只要继承 这个类 就可以运行 Unitils了
@SpringApplicationContext({"/appContext-unit.xml"})
public abstract class UnitilsH2TestApplicationTests extends UnitilsJUnit4 {
}

  • 2.6 appContext-unit.xml 配置

    

    

以上所有的配置和代码 已经搭建好了 Unitils H2 接下去只要测试自己想测试的DAO(REPOSITORY) 就可以了

3. XXXRepository 测试

  • 3.1 UserRepository 测试开发 教大家一个快速的构建测试方法

    我这里的快捷键是 command + T、快捷键修改 大家可以去看idea设置项
    Unitils H2 测试基础设施_第1张图片
    image.png

    快速构建测试类
    image.png

    Unitils H2 测试基础设施_第2张图片
    image.png

选择你要测试方法 就可以了

  • 3.2 UserRepositoryImplTest 代码
@DataSet(value = "/database/dataset/user.xml")
public class UserRepositoryImplTest extends UnitilsH2TestApplicationTests {

    @SpringBeanByType
    private UserRepository userRepository;

    @Test
    public void findByName() throws Exception {
        User user = userRepository.findByName("1");
        ##断言user中的变量email 的值为1 
        Assertions.assertThat(user).hasFieldOrPropertyWithValue("email", "1");
    }

}
  • 3.2 user.xml 代码 意思就是在user表中 生成一条记录



    
    


以上就是全部内存 直接运行就好了
附上 githua 项目地址 https://github.com/chenshengyu/unitils-h2-test.git

你可能感兴趣的:(Unitils H2 测试基础设施)