最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot對(duì)數(shù)據(jù)訪問(wèn)層進(jìn)行單元測(cè)試的方法詳解

 更新時(shí)間:2023年08月14日 10:54:12   作者:Young丶  
我們公司作為一個(gè)面向銀行、金融機(jī)構(gòu)的TO B類企業(yè),頻繁遇到各個(gè)甲方爸爸提出的國(guó)產(chǎn)化數(shù)據(jù)庫(kù)的改造需求,包括OceanBase, TiDB,geldenDB等等,本文就介紹一種快高效、可復(fù)用的解決方案——對(duì)數(shù)據(jù)訪問(wèn)層做單元測(cè)試,需要的朋友可以參考下

Mybatis測(cè)試依賴

我們項(xiàng)目采用的 SpringBoot + Mybatis 作為開(kāi)發(fā)框架,大家第一想到可以用 SpringBoot 自帶的測(cè)試注解 @SpringBootTest 進(jìn)行測(cè)試。但是使用該注解有一個(gè)最大的弊端就是需要啟動(dòng)整個(gè)容器,注入全部的bean,那么一次測(cè)試就相當(dāng)于啟動(dòng)一次應(yīng)用,我們的應(yīng)用啟動(dòng)一次就要花費(fèi)近70~80秒,黃花菜都涼了。

img

那么有沒(méi)有更好的辦法,有必要注入全量的bean嗎?是不是只要注入數(shù)據(jù)訪問(wèn)層相關(guān)的bean即可,其實(shí)官方的 mybatis 就給了我們這樣的的解決方案。

引入依賴 mybatis-spring-boot-starter-test

<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter-test</artifactId>
  <version>2.3.0</version>
  <scope>test</scope>
</dependency>

Mapper接口

@Mapper
public interface CityMapper {
    @Select("SELECT * FROM CITY WHERE state = #{state}")
    City findByState(@Param("state") String state);
}

使用junit5的測(cè)試類

// 使用junit5
@MybatisTest
// 使用真實(shí)的數(shù)據(jù)源進(jìn)行測(cè)試
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class CityMapperTest {
    @Autowired
    private CityMapper cityMapper;
    @Test
    public void findByStateTest() {
        City city = cityMapper.findByState("CA");
        assertThat(city.getName()).isEqualTo("San Francisco");
        assertThat(city.getState()).isEqualTo("CA");
        assertThat(city.getCountry()).isEqualTo("US");
    }
}

自定義一個(gè)啟動(dòng)類

@MybatisTest 在默認(rèn)情況下將會(huì)探測(cè)到帶有 @SpringBootApplication 的類。 因此,由于 bean 定義的一些方法,可能會(huì)發(fā)生一些意想不到的錯(cuò)誤,或者一些不必要的組件被裝入 ApplicationContext 。 為了避免這種情況,我們可以在與測(cè)試類相同的包中創(chuàng)建帶有 @SpringBootApplication 的類。

package sample.mybatis.mapper;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
class MapperTestApplication {
}

img

運(yùn)行結(jié)果

img

但是, 上面是使用原生mybatis的測(cè)試方式,而我們項(xiàng)目用的是基于mybatis封裝的開(kāi)源框架 tkMapper github 地址是 https://github.com/abel533/Mapper ,并不適用啊,無(wú)解,只能去看下 mybatis-spring-boot-starter-test 的原理。

實(shí)現(xiàn)原理

實(shí)際上 mybatis-spring-boot-starter-test 的實(shí)現(xiàn)原理很簡(jiǎn)單,代碼目錄結(jié)構(gòu)如下:

img

@MybatisTest 注解如下,引入 MybatisTestContextBootstrapper 測(cè)試引導(dǎo)程序。同時(shí)引入其他的注解,進(jìn)行自動(dòng)裝配。

img

@AutoConfigureMybatis MybatisTest 注解引入,會(huì)去找 META-INF 下的 spring.factories ,自動(dòng)組裝mybatis相關(guān)的bean

img

那么基于目前的理解,我們也可以簡(jiǎn)單實(shí)現(xiàn)一個(gè)基于 TkMapper 的測(cè)試框架。

Mapper測(cè)試框架

我們參照 mybatis 原生的實(shí)現(xiàn)方式

重新命名,內(nèi)容不變

img

修改 spring.factories 添加 MapperAutoConfiguration

img

使用自定義測(cè)試注解 @MapperTest

img

雖然這里有 insert 語(yǔ)句,但是測(cè)試結(jié)束,數(shù)據(jù)不會(huì)真的插入到表中,因?yàn)?MapperTest 注解上包含了事務(wù)注解,所以是可以反復(fù)進(jìn)行測(cè)試的。

img

總結(jié)

本文分享了基于 springboot+mybatis 項(xiàng)目中針對(duì)數(shù)據(jù)訪問(wèn)層進(jìn)行單元測(cè)試的一種方式,這種方式只注入mybatis相關(guān)的bean,快速高效的對(duì)不同類型的數(shù)據(jù)庫(kù)進(jìn)行測(cè)試,保證程序的正確性。

其實(shí),對(duì)于大多數(shù)據(jù)的程序員來(lái)說(shuō),寫(xiě)單元測(cè)試可能是一種負(fù)擔(dān)和累贅,但是如果你的單元測(cè)試真的能夠在你的項(xiàng)目中有其價(jià)值,那么就是值得的,千萬(wàn)不要為了單元測(cè)試而單元測(cè)試。

以上就是SpringBoot對(duì)數(shù)據(jù)訪問(wèn)層進(jìn)行單元測(cè)試的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot對(duì)數(shù)據(jù)訪問(wèn)層測(cè)試的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java實(shí)現(xiàn)圖片旋轉(zhuǎn)、指定圖像大小和水平翻轉(zhuǎn)

    Java實(shí)現(xiàn)圖片旋轉(zhuǎn)、指定圖像大小和水平翻轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)圖像旋轉(zhuǎn),指定圖像大小,水平翻轉(zhuǎn)圖像,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 詳解Java的面向?qū)ο蠛兔嫦蜻^(guò)程

    詳解Java的面向?qū)ο蠛兔嫦蜻^(guò)程

    我們知道,Java是面向?qū)ο蟮木幊陶Z(yǔ)言,但是至今仍有不少同學(xué)還不太懂”面向?qū)ο蟆暗拇_切含義,今天這篇文章就帶大家真正地認(rèn)識(shí)面向?qū)ο螅信d趣的同學(xué)可以跟著小編一起來(lái)學(xué)習(xí)
    2023-05-05
  • 淺談Mybatis+mysql 存儲(chǔ)Date類型的坑

    淺談Mybatis+mysql 存儲(chǔ)Date類型的坑

    這篇文章主要介紹了淺談Mybatis+mysql 存儲(chǔ)Date類型的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • SpringBoot中的application.properties無(wú)法加載問(wèn)題定位技巧

    SpringBoot中的application.properties無(wú)法加載問(wèn)題定位技巧

    這篇文章主要介紹了SpringBoot中的application.properties無(wú)法加載問(wèn)題定位技巧,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java?I/O流使用示例詳解

    Java?I/O流使用示例詳解

    Java.io?包幾乎包含了所有操作輸入、輸出需要的類。所有這些流類代表了輸入源和輸出目標(biāo)。本文將通過(guò)示例為大家詳細(xì)講講?I/O流的使用教程,需要的可以參考一下
    2022-08-08
  • 網(wǎng)關(guān)Gateway過(guò)濾器的使用詳解

    網(wǎng)關(guān)Gateway過(guò)濾器的使用詳解

    Gateway網(wǎng)關(guān)的過(guò)濾器分為兩種,一種是局部過(guò)濾器,一種是全局過(guò)濾器,過(guò)濾器就是過(guò)濾一些請(qǐng)求,在這里,全局過(guò)濾器的作用是處理一切進(jìn)入網(wǎng)關(guān)的請(qǐng)求和微服務(wù)響應(yīng),與GatewayFilter的作用一樣,本文給大家介紹網(wǎng)關(guān)Gateway過(guò)濾器的使用,感興趣的朋友一起看看吧
    2022-07-07
  • idea創(chuàng)建項(xiàng)目報(bào)錯(cuò)之java 17 is not supported問(wèn)題的解決

    idea創(chuàng)建項(xiàng)目報(bào)錯(cuò)之java 17 is not supported問(wèn)題的解決

    文章討論了在使用IntelliJ IDEA創(chuàng)建Spring Boot項(xiàng)目時(shí)遇到的JDK版本不兼容問(wèn)題,提供了修改ServerURL替換初始化源地址和選擇JDK8的解決辦法
    2026-03-03
  • Spring Boot數(shù)據(jù)庫(kù)鏈接池配置方法

    Spring Boot數(shù)據(jù)庫(kù)鏈接池配置方法

    這篇文章主要介紹了Spring Boot數(shù)據(jù)庫(kù)鏈接池配置方法,需要的朋友可以參考下
    2017-04-04
  • Java實(shí)現(xiàn)DelayQueue延遲隊(duì)列示例代碼

    Java實(shí)現(xiàn)DelayQueue延遲隊(duì)列示例代碼

    Java中的DelayQueue是一個(gè)特殊的隊(duì)列,它只允許在指定的延遲時(shí)間之后才能從隊(duì)列中取出元素,這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)DelayQueue延遲隊(duì)列的相關(guān)資料,需要的朋友可以參考下
    2025-07-07
  • 優(yōu)化常見(jiàn)的java排序算法

    優(yōu)化常見(jiàn)的java排序算法

    這篇文章主要介紹了Java編程中快速排序算法的實(shí)現(xiàn)及相關(guān)算法優(yōu)化,快速排序算法的最差時(shí)間復(fù)雜度為(n^2),最優(yōu)時(shí)間復(fù)雜度為(n\log n),存在優(yōu)化的空間,需要的朋友可以參考下
    2021-07-07

最新評(píng)論

湘潭县| 十堰市| 台北市| 元谋县| 新邵县| 义乌市| 金沙县| 巴林右旗| 山西省| 夏邑县| 望谟县| 哈巴河县| 湘阴县| 错那县| 德惠市| 莒南县| 津市市| 华宁县| 英吉沙县| 肥西县| 内乡县| 句容市| 盘锦市| 论坛| 鹿泉市| 额尔古纳市| 无为县| 泰州市| 柏乡县| 望谟县| 安庆市| 嘉义市| 罗江县| 瑞昌市| 右玉县| 鄂温| 邯郸县| 唐山市| 简阳市| 浦东新区| 潼关县|