springboot測試用例注入失敗問題


單元測試用例模板


@RunWith(SpringRunner.class)
//@SpringBootTest(classes = PersonConfig.class)
@ContextConfiguration(classes = PersonConfig.class)
public class Test {

    @Resource
    private PersonEventService personEventService;

    @Test
    public void test() {
//        ApplicationContext context = new AnnotationConfigApplicationContext(PersonEventService.class);
//        PersonEventService personEventService = context.getBean(PersonEventService.class);
        System.out.println(personEventService);
        personEventService.registerUser("userName222");
    }

}

@RunWith注解

解釋:

在正常情況下測試類是需要@RunWith的,作用是告訴java你這個類通過用什么運行環境運行,例如啟動和創建spring的應用上下文。否則你需要為此在啟動時寫一堆的環境配置代碼。你在IDEA里去掉@RunWith仍然能跑是因為在IDEA里識別為一個JUNIT的運行環境,相當於就是一個自識別的RUNWITH環境配置。但在其他IDE里並沒有,所以盡量加上該注解。

 

————————————————
版權聲明:本文為CSDN博主「贏啦啦」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_21108099/article/details/111496005

 

 

@ContextConfiguration注解

解釋:

有兩種使用方式:

1.@ContextConfiguration(locations={"classpath*:/spring1.xml","classpath*:/spring2.xml"})

指定xml配置文件

2.@ContextConfiguration(classes = PersonConfig.class)

指定java配置類

 

XML方式:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.1.xsd  >

    <!-- 自動掃描該包 -->
    <context:component-scan base-package="com" />
</beans>

這個XML文件通過<context:component-scan base-package="com" />標簽將com包下的bean全都自動掃描進來。

@ContextConfiguration括號里的locations = {"classpath*:/*.xml"}就表示將class路徑里的所有.xml文件都包括進來,那么剛剛創建的那么XML文件就會包括進來,那么里面自動掃描的bean就都可以拿到了,此時就可以在測試類中使用@Autowired注解來獲取之前自動掃描包下的所有bean

classpath和classpath*區別:

  • classpath:只會到你的class路徑中查找找文件。

  • classpath*:不僅包含class路徑,還包括jar文件中(class路徑)進行查找。


JAVA配置類:

/**
 * 配置文件java
 */
@Configuration
@ComponentScan("com.xxx.xxx.controller.eventtest")
public class PersonEventConfig {

}

如果使用Java的方式就會很簡單了,我們就不用寫XML那么繁瑣的文件了,我們可以創建一個Java類來代替XML文件,只需要在這個類上面加上@Configuration注解,然后再加上@ComponentScan注解就開啟了自動掃描,如果注解沒有寫括號里面的東西,@ComponentScan默認會掃描與配置類相同的包。

相較於XML,是不是很酷炫,這也是官方提倡的方式。

 


免責聲明!

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



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