亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ContextRefreshedEvent 在 Spring 集成測試中過早觸發

ContextRefreshedEvent 在 Spring 集成測試中過早觸發

狐的傳說 2021-09-03 10:09:35
我想測試一個像Example這樣處理 aContextRefreshedEvent并在處理程序方法中連接到服務器的類:public class Example {    @EventListener    public void onApplicationEvent(ContextRefreshedEvent event) {        startWebSocketConnection();    }    // ...}但是在集成測試中,應用程序上下文是在 Web 套接字服務器啟動并運行之前構建的,所以我收到一個異常,說連接失?。╦ava.net.ConnectException: Connection refused: no further information在這種情況下)。測試看起來像這樣:@ExtendWith(SpringExtension.class)@TestInstance(TestInstance.Lifecycle.PER_CLASS)@SpringBootTestpublic class WebSocketDataSourceTest {    @Autowired     private Example example;    @Autowired    private WebSocketServer server; // created too late    // ...}是否有可能以某種方式抑制ContextRefreshedEvent或推遲應用程序上下文的創建,以便 Web 套接字服務器可以在此之前啟動?或者還有其他解決方案嗎?
查看完整描述

1 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

似乎沒有辦法抑制 Spring 框架觸發的事件或推遲應用程序上下文的創建。所以我想出了以下解決方法:


import org.springframework.core.env.Environment;


public class Example {


    private boolean skipNextEvent;


    @Autowired

    public Example(Environment environment) {

        skipNextEvent = environment.acceptsProfiles("test");

    }


    @EventListener

    public void onApplicationEvent(ContextRefreshedEvent event) {

        if (skipNextEvent) {

            skipNextEvent = false;

            return;

        }

        startWebSocketConnection();

    }


    // ...

}

測試手動觸發事件處理程序。


@ExtendWith(SpringExtension.class)

@TestInstance(TestInstance.Lifecycle.PER_CLASS)

@SpringBootTest

@ActiveProfiles("test") // set profile "test"

public class WebSocketDataSourceTest {


    @Autowired 

    private Example example;


    @Autowired

    private WebSocketServer server;


    @Test

    public void shouldWork() {

        // ...

        example.onApplicationEvent(null); // trigger manually

        // ...

    }

}


查看完整回答
反對 回復 2021-09-03
  • 1 回答
  • 0 關注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號