单元测试
添加maven依赖
Spring Boot单元测试是在目录下,可以选择手动创建测试类,另外还可以借助IDE快速创建,在需要创建测试的文件上点击头部菜单栏选择/Navigate/Test
或者快捷键⇧⌘T(Mac电脑)
来创建,如下所示:
单击Test
之后会出现一个小弹窗提示 Create New Test...
,如下所示:
点击 Create New Test...
,弹出如下窗口所示
service单元测试
创建service/UserServiceTest.java
类,在类名上加上以下两个注解,就可以让一个普通类变成一个单元测试类。
@SpringBootTest
:将启动整个Spring Boot工程
service/UserServiceTest.java
在测试类上右击选择Run 'UserServiceTest'
,可以看到以下运行结果我们期望的user.getAge()
为18,但是实际返回的是-1
以上是针对业务层测试,如果想进行接口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