单元测试

    添加maven依赖

    Spring Boot单元测试是在目录下,可以选择手动创建测试类,另外还可以借助IDE快速创建,在需要创建测试的文件上点击头部菜单栏选择/Navigate/Test或者快捷键⇧⌘T(Mac电脑)来创建,如下所示:

    单击Test之后会出现一个小弹窗提示 Create New Test...,如下所示:

    单元测试 - 图1

    点击 Create New Test...,弹出如下窗口所示

    service单元测试

    创建service/UserServiceTest.java 类,在类名上加上以下两个注解,就可以让一个普通类变成一个单元测试类。

    1. @SpringBootTest:将启动整个Spring Boot工程

    service/UserServiceTest.java

    在测试类上右击选择Run 'UserServiceTest',可以看到以下运行结果我们期望的user.getAge()为18,但是实际返回的是-1

    单元测试 - 图2

    以上是针对业务层测试,如果想进行接口API测试怎么办呢,难道,开发完成每次调用postman一个个测吗?答案当然是no,不过,你也可以选择一个个测试没什么问题,如果你想通过代码实现模拟http请求就要用到我们的@AutoConfigureMockMvc注解,使用了MockMvc无需启动项目,就可实现接口测试。

    以下用到的MockMvc方法介绍

    • :执行请求
    • MockMvcRequestBuilders.get:还支持post、put、delete等
    • contentType(MediaType.APPLICATION_JSON_UTF8):表示请求传输的Conent-Type=application/json;charset=utf-8
    • accept(MediaType.APPLICATION_JSON)):客户端希望接收的Conent-Type=application/json;
    • andReturn():返回结果

    问题汇总

    org.hibernate.LazyInitializationException: could not initialize proxy [com.angelo.domain.User#1] - no Session

    原因是懒加载的问题,因为hibernate的机制是当我们查询一个对象的时候,在默认情况下,返回的只是该对象的普通属性,当用户去使用对象属性的时候,才会向数据库再一次查询,可是,这时session已经关闭了,无法对数据库进行查询。

    解决方案: SpringBoot配置文件设置spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true

    Github查看本文完整示例 chapter5-1