设为首页 加入收藏

TOP

quarkus数据库篇之一:比官方demo更简单的基础操作(四)
2023-08-26 21:11:08 】 浏览:93
Tags:quarkus demo 简单的
c class FruitServiceTest { /** * import.sql中导入的记录数量,这些是应用启动是导入的 */ private static final int EXIST_RECORDS_SIZE = 3; /** * import.sql中,第一条记录的id */ private static final int EXIST_FIRST_ID = 1; /** * 在Fruit.java中,id字段的SequenceGenerator指定了initialValue等于10, * 表示自增ID从10开始 */ private static final int ID_SEQUENCE_INIT_VALUE = 10; @Inject FruitService fruitService; @Test @DisplayName("list") @Order(1) public void testGet() { List<Fruit> list = fruitService.get(); // 判定非空 Assertions.assertNotNull(list); // import.sql中新增3条记录 Assertions.assertEquals(EXIST_RECORDS_SIZE, list.size()); } @Test @DisplayName("getSingle") @Order(2) public void testGetSingle() { Fruit fruit = fruitService.getSingle(EXIST_FIRST_ID); // 判定非空 Assertions.assertNotNull(fruit); // import.sql中的第一条记录 Assertions.assertEquals("Cherry", fruit.getName()); } @Test @DisplayName("update") @Order(3) public void testUpdate() { String newName = "ShanDongBigCherry"; fruitService.update(EXIST_FIRST_ID, new Fruit(newName)); Fruit fruit = fruitService.getSingle(EXIST_FIRST_ID); // 从数据库取出的对象,其名称应该等于修改的名称 Assertions.assertEquals(newName, fruit.getName()); } @Test @DisplayName("create") @Order(4) public void testCreate() { Fruit fruit = new Fruit("Orange"); fruitService.create(fruit); // 由于是第一次新增,所以ID应该等于自增ID的起始值 Assertions.assertEquals(ID_SEQUENCE_INIT_VALUE, fruit.getId()); // 记录总数应该等于已有记录数+1 Assertions.assertEquals(EXIST_RECORDS_SIZE+1, fruitService.get().size()); } @Test @DisplayName("delete") @Order(5) public void testDelete() { // 先记删除前的总数 int numBeforeDelete = fruitService.get().size(); // 删除第一条记录 fruitService.delete(EXIST_FIRST_ID); // 记录数应该应该等于删除前的数量减一 Assertions.assertEquals(numBeforeDelete-1, fruitService.get().size()); } }
  • 上述单元测试类有以下几处要注意
  1. 一共五个测试方法,为了给它们排序,要用注解TestMethodOrder修饰类,并制定value为MethodOrderer.OrderAnnotation.class
  2. 再在每个方法上用Order注解修饰,就可以用value执行测试顺序了
  3. 测试方法有点多,为了便于观察,用注解DisplayName为每个测试方法起了个名字,有了名字,IDEA上的测试结果效果如下
image-20220504153230297
  • 单元测试代码写完了,是不是可以立即开始测试了?别急,还有个小坑,有一定几率遇到,别看坑小,要是掉进去还有点麻烦...

IDEA的小坑

  • 回顾之前的配置,数据库信息都放在application-test.properties文件中,因此只有profile等于test时,才有数据库配置信息,其他profile都没有对应的配置文件
  • 一般情况下,如何执行单元测试呢?欣宸的习惯是直接点击下图红框中的按钮,在弹出的菜单上选择第一项Run ‘FruitServiceTest’,这样操作简单,又能通过IDEA界面观察测试结果
image-20220504155008286
  • 实测发现,使用上述方式,IDEA给我们设置的profile可能不是test,而是default,而default这个profile的配置文件是不存在的,因此单元测试启动就会失败

  • 上述问题,我这边偶尔遇到过几次,目前无法稳定复现,针对此问题的解决方法如下

  • 点击图标运行单元测试的时候,选择下图红框中的选项

image-20220504121554599

  • 在弹出的配置窗口中,新增下图红框中的内容,这就指定了profile等于test

image-20220504121749195

  • 运行的时候,选择上图配置的名字FruitServiceTest(test-profile),就能确保profile是test了

运行单元测试

  • 运行单元测试,结果如下图,不但测试全部通过,输出的日志内容也非常丰富,解读他们,是温习前面知识点的最佳手段

image-20220504161310577

  • 还有一处要注意的,就是上图显示getSingle方法耗时仅6ms,例外,getSingle执行的时候也没有SQL日志输出,这是因为getSingleb并没有真正的查询数据库,而是使用了前面list的缓存结果,验证是否使用了缓存很简单,将testGet和testGetSingle两个方法的执行顺序调换一下,再执行,就发现testGetSingle执行耗时也变长了,而且SQL日志也出现了
  • 上述这种不查数据库而走本地缓存的操作,虽然看似提升了性能,然而风险也不小,getSingle得到的结果并非数据库中最新的,关闭缓存的方法如下图,修改Fruit.java的配置,如下图

image-20220504164832854

  • 至此,相比官方demo更加精简的quarkus数据库操作入门已完成,希望本篇能让咱们对quarkus的数据库操作能力和流程有基本的认识,为接下来的逐渐深入打好基础

欢迎关注博客园:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇聊聊JDK1.0到JDK20的那些事儿 下一篇Nacos源码 (3) 注册中心

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目