经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring Boot » 查看文章
java~springboot~h2数据库在单元测试中的使用
来源:cnblogs  作者:张占岭  时间:2018/9/25 19:34:29  对本文有异议

单元测试有几点要说的

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

  1. 单元测试的用例之间不要有相互依赖

  2. 单元测试数据来源为本地,不要访问外部资源,外部数据库也是不行的

  3. 对于集成测试,每个控制器对应一个测试类,它们可以有统一的抽象基类,用来存储公用的属性,如数据对象,http对象等

引入相关依赖包

  1. testCompile('com.h2database:h2')

下面对h2数据库的配置

  1. spring:
  2.   profiles: integTest
  3.   cloud.config.enabled: false
  4.   h2:
  5.     console:
  6.       enabled: true
  7.       path: /h2
  8.   datasource:
  9.     url: jdbc:h2:mem:testdb;MODE=MYSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false
  10.     driver-class-name: org.h2.Driver
  11.     username: sa
  12.     password: sa
  13.     schema-username: sa
  14.     schema-password: sa
  15.     data-username: sa
  16.     data-password: sa
  17.     schema: classpath:db/*.sql
  18.     data: classpath:data/*.sql
  19.     initialization-mode: always
  20.     platform: h2

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

  1. @RunWith(SpringRunner.class)
  2. @ActiveProfiles("integTest")
  3. @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
  4. public abstract class ControllerTestBase {
  5.  
  6.   protected MockMvc mockMvc;
  7.  
  8.   @Autowired
  9.   protected ObjectMapper objectMapper;
  10.  
  11.   @Autowired
  12.   private WebApplicationContext webApplicationContext;
  13.  
  14.   @Before
  15.   public void setUp() {
  16.     mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
  17.   }
  18.  
  19.  
  20. public class CustomerTagsControllerTest extends ControllerTestBase {
  21.   @Autowired
  22.   CustomerTagsService customerTagsService;
  23.  
  24.   @Test
  25.   public void getCustomerTags() throws Exception {
  26.     mockMvc.perform(
  27.         get("/api/tags")
  28.             .accept(MediaType.APPLICATION_JSON_UTF8))
  29.         .andExpect(status().isOk())
  30.         .andExpect(jsonPath("$[0].tagsDescription").value("未接"));
  31.   }
  32. }

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号