SpringBoot整合Mybatis進行單元測試mapper和xml路徑不一致出現的詭異問題


最近在做一個項目,采用SpringBoot整合MybatisPlus開發,由於mapper.xml文件和mapper路徑地址不一致,導致做單元測試報異常

  application.yml配置如下:

  寫了個單元測試的代碼:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = CTScmApplication.class)
public class ServiceTest {

    @Resource
    private BuyerMapper buyerMapper;

    @Test
    public void test() {
        System.out.println("test =" + buyerMapper.selectSum());
    }
} 

配置沒有問題,但運行單元測試卻拋了異常信息: 

 

  其實XML是有配置 selectSum 方法的,不做單元測試,在項目里其實是可以正常執行的。

不得已,debug源碼才發現,Mybatis啟動后會加載mapper.xml配置文件中的SQL放入一個方法MAP,然后根據mapper的方法名作為 statementId (這個應該很熟悉了,就是xml里配置的id,這里是 selectSum) 去方法MAP里取SQL,這里拋異常其實就是在方法MAP里沒有get出來。

 最后發現application.yml文件中的加載mapper.xml配置文件的路徑由 

classpath:/com/ihanchen/*/mapper/xml/*.xml
修改為classpath*:/com/ihanchen/*/mapper/xml/*.xml

就可以運行成功,應該是mapper xml文件沒有放到測試類路徑下,而是放在項目類路徑下,測試類路徑掃描不到項目類路徑下的文件則會導致報異常。

classpath只會掃描當前項目中的路徑,而classpath*會掃描當前類路徑和依賴的jar包等的類路徑,個人猜測classpath*也會掃描target目錄下所有的類路徑。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM