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

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

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

Mybatis測試依賴

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

那么有沒有更好的辦法,有必要注入全量的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");
    }
}
  • 自定義一個(gè)啟動(dòng)類

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

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

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

但是, 上面是使用原生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)如下:

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

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

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

Mapper測試框架

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

  • 修改spring.factories添加MapperAutoConfiguration

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

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

總結(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à)值,那么就是值得的,千萬不要為了單元測試而單元測試。

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

相關(guān)文章

  • Java拼接字符串時(shí)如何去掉最后一個(gè)多余的逗號(hào)

    Java拼接字符串時(shí)如何去掉最后一個(gè)多余的逗號(hào)

    當(dāng)我們遍歷拼接字符串的時(shí)候,最后會(huì)多出一個(gè)我們添加的字符(比如逗號(hào)),下面通過實(shí)例代碼給大家介紹Java拼接字符串時(shí)去掉最后一個(gè)多余的逗號(hào),感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Java用 Rhino/Nashorn 代替第三方 JSON 轉(zhuǎn)換庫

    Java用 Rhino/Nashorn 代替第三方 JSON 轉(zhuǎn)換庫

    本篇文章主要介紹了Java用 Rhino/Nashorn 代替第三方 JSON 轉(zhuǎn)換庫,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-05-05
  • JAVA調(diào)用Deepseek的api完成基本對話簡單代碼示例

    JAVA調(diào)用Deepseek的api完成基本對話簡單代碼示例

    這篇文章主要介紹了JAVA調(diào)用Deepseek的api完成基本對話的相關(guān)資料,文中詳細(xì)講解了如何獲取DeepSeek?API密鑰、添加HTTP客戶端依賴、創(chuàng)建HTTP請求并使用示例代碼來對接DeepSeek?API,需要的朋友可以參考下
    2025-02-02
  • JAVA字符串拼接常見方法匯總

    JAVA字符串拼接常見方法匯總

    這篇文章主要介紹了JAVA字符串拼接常見方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • HashMap和HashTable底層原理以及常見面試題

    HashMap和HashTable底層原理以及常見面試題

    今天小編就為大家分享一篇關(guān)于HashMap和HashTable底層原理以及常見面試題,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • mybatis攔截器的使用方式(輸出日志或sql語句)

    mybatis攔截器的使用方式(輸出日志或sql語句)

    這篇文章主要介紹了mybatis攔截器的使用方式(輸出日志或sql語句),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Quartz中的Job與JobDetail解析

    Quartz中的Job與JobDetail解析

    這篇文章主要介紹了Quartz中的Job與JobDetail解析,你定義了一個(gè)實(shí)現(xiàn)Job接口的類,這個(gè)類僅僅表明該job需要完成什么類型的任務(wù),除此之外,Quartz還需要知道該Job實(shí)例所包含的屬性;這將由JobDetail類來完成,需要的朋友可以參考下
    2023-11-11
  • 關(guān)于Http持久連接和HttpClient連接池的深入理解

    關(guān)于Http持久連接和HttpClient連接池的深入理解

    眾所周知,httpclient是java開發(fā)中非常常見的一種訪問網(wǎng)絡(luò)資源的方式了,下面這篇文章主要給大家介紹了關(guān)于Http持久連接和HttpClient連接池的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • BufferedReader中read()方法和readLine()方法的使用

    BufferedReader中read()方法和readLine()方法的使用

    這篇文章主要介紹了BufferedReader中read()方法和readLine()方法的使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 使用webservice自定義注解處理參數(shù)加解密問題

    使用webservice自定義注解處理參數(shù)加解密問題

    這篇文章主要介紹了使用webservice自定義注解處理參數(shù)加解密問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論

丹江口市| 宁武县| 太仆寺旗| 清原| 汝城县| 馆陶县| 三亚市| 甘孜| 宜丰县| 泰安市| 迭部县| 呼和浩特市| 宜城市| 和政县| 中阳县| 内丘县| 金湖县| 池州市| 蒙阴县| 洛扎县| 弥渡县| 威宁| 山阳县| 五寨县| 汉沽区| 喀什市| 洛浦县| 青州市| 万载县| 夏河县| 扶沟县| 仙游县| 友谊县| 秦皇岛市| 雅江县| 耒阳市| 闽侯县| 比如县| 县级市| 济南市| 永和县|