欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

Mybatis測試依賴

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

img

那么有沒有更好的辦法,有必要注入全量的bean嗎?是不是只要注入數(shù)據(jù)訪問層相關(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的測試類

// 使用junit5
@MybatisTest
// 使用真實(shí)的數(shù)據(jù)源進(jìn)行測試
@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");
    }
}

自定義一個啟動類

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

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

img

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

img

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

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

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

img

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

img

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

img

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

Mapper測試框架

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

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

img

修改 spring.factories 添加 MapperAutoConfiguration

img

使用自定義測試注解 @MapperTest

img

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

img

總結(jié)

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

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

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

相關(guān)文章

  • Spring中bean集合注入的方法詳解

    Spring中bean集合注入的方法詳解

    Spring作為項(xiàng)目中不可缺少的底層框架,提供的最基礎(chǔ)的功能就是bean的管理了。bean的注入相信大家都比較熟悉了,但是有幾種不太常用到的集合注入方式,可能有的同學(xué)會不太了解,今天我們就通過實(shí)例看看它的使用
    2022-07-07
  • 深入講解Java中的流程控制與運(yùn)算符

    深入講解Java中的流程控制與運(yùn)算符

    這篇文章主要介紹了Java中的流程控制與運(yùn)算符,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • Java多線程中Thread.currentThread()和this的區(qū)別詳解

    Java多線程中Thread.currentThread()和this的區(qū)別詳解

    這篇文章主要介紹了Java多線程中Thread.currentThread()和this的區(qū)別詳解,Thread.currentThread()方法返回的是對當(dāng)前正在執(zhí)行的線程對象的引用,this代表的是當(dāng)前調(diào)用它所在函數(shù)所屬的對象的引用,需要的朋友可以參考下
    2023-08-08
  • 淺談對象與Map相互轉(zhuǎn)化

    淺談對象與Map相互轉(zhuǎn)化

    這篇文章主要介紹了利用BeanMap進(jìn)行對象與Map的相互轉(zhuǎn)換,在文中列舉了完整代碼,需要的朋友可以參考下。
    2017-09-09
  • Java?多線程并發(fā)編程提高數(shù)據(jù)處理效率的詳細(xì)過程

    Java?多線程并發(fā)編程提高數(shù)據(jù)處理效率的詳細(xì)過程

    這篇文章主要介紹了Java?多線程并發(fā)編程提高數(shù)據(jù)處理效率,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Dubbo+Nacos服務(wù)啟動報(bào)錯,返回unknown user的問題

    Dubbo+Nacos服務(wù)啟動報(bào)錯,返回unknown user的問題

    這篇文章主要介紹了Dubbo+Nacos服務(wù)啟動報(bào)錯,返回unknown user的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • java藍(lán)橋杯歷年真題及答案整理(小結(jié))

    java藍(lán)橋杯歷年真題及答案整理(小結(jié))

    這篇文章主要介紹了java藍(lán)橋杯歷年真題及答案整理(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Java卡片布局管理器解釋及實(shí)例

    Java卡片布局管理器解釋及實(shí)例

    這篇文章主要介紹了Java卡片布局管理器解釋及實(shí)例,需要的朋友可以參考下。
    2017-09-09
  • IDEA無法打開Marketplace的三種解決方案(推薦)

    IDEA無法打開Marketplace的三種解決方案(推薦)

    這篇文章主要介紹了IDEA無法打開Marketplace的三種解決方案(推薦),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Spring AOP實(shí)現(xiàn)接口請求記錄到數(shù)據(jù)庫的示例代碼

    Spring AOP實(shí)現(xiàn)接口請求記錄到數(shù)據(jù)庫的示例代碼

    這篇文章主要介紹了Spring AOP實(shí)現(xiàn)接口請求記錄到數(shù)據(jù)庫,代碼包括引入AOP依賴及創(chuàng)建日志記錄表,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09

最新評論