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

基于Springboot+Mybatis對數(shù)據(jù)訪問層進行單元測試的方式分享

 更新時間:2023年07月19日 08:21:51   作者:JAVA旭陽  
本文將介紹一種快高效、可復(fù)用的解決測試方案——對數(shù)據(jù)訪問層做單元測試,文章通過代碼示例介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下

Mybatis測試依賴

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

那么有沒有更好的辦法,有必要注入全量的bean嗎?是不是只要注入數(shù)據(jù)訪問層相關(guān)的bean即可,其實官方的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ù)據(jù)源進行測試
@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 {
}

  • 運行結(jié)果

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

實現(xiàn)原理

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

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

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

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

Mapper測試框架

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

  • 修改spring.factories添加MapperAutoConfiguration

  • 使用自定義測試注解@MapperTest

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

總結(jié)

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

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

到此這篇關(guān)于基于Springboot+Mybatis對數(shù)據(jù)訪問層進行單元測試的方式分享的文章就介紹到這了,更多相關(guān)Springboot+Mybatis對數(shù)據(jù)訪問層進行單元測試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 阿里云主機上安裝jdk 某庫出現(xiàn)問題的解決方法

    阿里云主機上安裝jdk 某庫出現(xiàn)問題的解決方法

    今天安裝jdk到阿里云服務(wù)上,首先看下阿里云是32位還是64位的,如果是32位下載32位的包,如果是64位的下載64位的包,下面與大家分享下安裝過程中遇到問題的解決方法
    2013-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)及算法實例:樸素字符匹配 Brute Force

    Java數(shù)據(jù)結(jié)構(gòu)及算法實例:樸素字符匹配 Brute Force

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實例:樸素字符匹配 Brute Force,本文直接給出實例代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下
    2015-06-06
  • SpringBoot+LayIM+t-io 實現(xiàn)好友申請通知流程

    SpringBoot+LayIM+t-io 實現(xiàn)好友申請通知流程

    這篇文章主要介紹了 SpringBoot+LayIM+t-io 實現(xiàn)好友申請通知流程,本文圖文并茂給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2017-12-12
  • JavaWeb中文編碼問題實例講解

    JavaWeb中文編碼問題實例講解

    在本篇文章里小編給大家整理的是關(guān)于JavaWeb中文編碼問題方法的相關(guān)知識點內(nèi)容,需要的朋友們參考下
    2019-09-09
  • SpringData JPA中@OneToMany和@ManyToOne的用法詳解

    SpringData JPA中@OneToMany和@ManyToOne的用法詳解

    這篇文章主要介紹了SpringData JPA中@OneToMany和@ManyToOne的用法詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 一文教你掌握J(rèn)ava如何實現(xiàn)判空

    一文教你掌握J(rèn)ava如何實現(xiàn)判空

    實際項目中我們會有很多地方需要判空校驗,如果不做判空校驗則可能產(chǎn)生NullPointerException異常。所以本文小編為大家整理了Java中幾個常見的判空方法,希望對大家有所幫助
    2023-04-04
  • Spring Boot統(tǒng)一返回體的踩坑記錄

    Spring Boot統(tǒng)一返回體的踩坑記錄

    這篇文章主要給大家介紹了關(guān)于Spring Boot統(tǒng)一返回體踩坑的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Java中策略設(shè)計模式的實現(xiàn)及應(yīng)用場景

    Java中策略設(shè)計模式的實現(xiàn)及應(yīng)用場景

    策略設(shè)計模式是Java中一種常用的設(shè)計模式,它通過定義一系列算法并將其封裝成獨立的策略類,從而使得算法可以在不影響客戶端的情況下隨時切換。策略設(shè)計模式主要應(yīng)用于系統(tǒng)中存在多種相似的算法、需要靈活調(diào)整算法邏輯或者需要擴展新的算法等場景
    2023-04-04
  • Java利用httpclient通過get、post方式調(diào)用https接口的方法

    Java利用httpclient通過get、post方式調(diào)用https接口的方法

    這篇文章主要介紹了Java利用httpclient通過get、post方式調(diào)用https接口的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • SpringBoot項目jar發(fā)布后如何獲取jar包所在目錄路徑

    SpringBoot項目jar發(fā)布后如何獲取jar包所在目錄路徑

    這篇文章主要介紹了SpringBoot項目jar發(fā)布后如何獲取jar包所在目錄路徑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論