zoukankan      html  css  js  c++  java
  • java~springboot~h2数据库在单元测试中的使用

    单元测试有几点要说的

    事实上springboot框架是一个tdd框架,你在进行建立项目时它会同时建立一个单元测试项目,而我们的代码用例可以在这个项目里完成,对于单元测试大叔有以下几点需要说明一下:

    1. 单元测试的用例之间不要有相互依赖
    2. 单元测试数据来源为本地,不要访问外部资源,外部数据库也是不行的
    3. 对于集成测试,每个控制器对应一个测试类,它们可以有统一的抽象基类,用来存储公用的属性,如数据对象,http对象等

    引入相关依赖包

    testCompile('com.h2database:h2')
    

    下面对h2数据库的配置

    spring:
      profiles: integTest
      cloud.config.enabled: false
      h2:
        console:
          enabled: true
          path: /h2
      datasource:
        url: jdbc:h2:mem:testdb;MODE=MYSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false
        driver-class-name: org.h2.Driver
        username: sa
        password: sa
        schema-username: sa
        schema-password: sa
        data-username: sa
        data-password: sa
        schema: classpath:db/*.sql
        data: classpath:data/*.sql
        initialization-mode: always
        platform: h2
    

    下面直接写单元测试即可,业务层不用修改,数据库根据profile去选择mysql还是h2

    @RunWith(SpringRunner.class)
    @ActiveProfiles("integTest")
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    public abstract class ControllerTestBase {
    
      protected MockMvc mockMvc;
    
      @Autowired
      protected ObjectMapper objectMapper;
    
      @Autowired
      private WebApplicationContext webApplicationContext;
    
      @Before
      public void setUp() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
      }
    
    
    public class CustomerTagsControllerTest extends ControllerTestBase {
      @Autowired
      CustomerTagsService customerTagsService;
    
      @Test
      public void getCustomerTags() throws Exception {
        mockMvc.perform(
            get("/api/tags")
                .accept(MediaType.APPLICATION_JSON_UTF8))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$[0].tagsDescription").value("未接"));
      }
    }
    
    

    对于h2在单元测试里的使用就说这么说,有不清楚的可以给大叔留言!

  • 相关阅读:
    drf中的请求模块和渲染模块
    drf基础
    vue中的路由传参及跨组件传参
    vue项目环境搭建与组件介绍
    vue基础指令了解补充及组件介绍
    整理的几个防止刷新后退重复提交数据的方法
    程序员心灵之塔
    怎么样才是好的程序员
    using在namespace里面还是外面有区别吗
    高级.net工程师必备
  • 原文地址:https://www.cnblogs.com/lori/p/9684946.html
Copyright © 2011-2022 走看看