簡體   English   中英

為什么 Spring @Autowired ApplicationContext null 在集成測試中?

[英]Why is Spring @Autowired ApplicationContext null in integration test?

我還是 Spring 的新手,並且在堆棧上查看了類似的問題,但無法從我讀過的內容中找到答案。

當我調用我的 applicationContext 變量時,我收到一個 NPE,這意味着 bean 一定沒有被正確創建或注入。 這是我的程序的相關部分。

@SpringBootTest
@ContextConfiguration(classes = TestConfig.class)
public class SampleIT {

    @Autowired
    private ApplicationContext applicationContext;

    @Test
    public void sampleMethod() throws Exception {

        //NPE below
        String[] allBeanNames = applicationContext.getBeanDefinitionNames();

        //more logic 

我試圖讓 ApplicationContext 實例調試為什么其他 bean 是我的配置中的 null ,所以這一切都必須是因為我對如何設置 ApplicationContext 和注入其中的 bean 的理解存在一個基本缺陷。 很感謝任何形式的幫助!

嘗試將以下注釋添加到您的 class SampleIT

@RunWith(SpringRunner.class)

如果您在版本 4 中使用 Junit,則必須使用 @RunWith(SpringRunner.class),如果您使用的是 Junit 版本 5,則必須使用 @ExtendWith(SpringExtension.class)。

此外,如果您使用的是 Mockito 您可以使用 @ExtendWith(MockitoExtension.class) 等。

我強烈建議在此鏈接@SpringBootTest中閱讀有關@SpringBootTest注釋的文檔

現在回答我自己的問題。 導入org.junit.jupiter.api.Test而不是org.junit.Test將導致使用 Junit5。 這將允許 Junit 在沒有@RunWith(SpringRunner.class)注釋的情況下與 Spring 一起使用。 我正在使用的代碼庫中仍然存在 Junit4 的殘余,因此這是在完全遷移到 Junit 5 之前的快速修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM