第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在集成測試之前啟動(dòng)主應(yīng)用程序和測試應(yīng)用程序

在集成測試之前啟動(dòng)主應(yīng)用程序和測試應(yīng)用程序

慕斯709654 2023-06-14 14:40:53
我有兩個(gè) spring boot 應(yīng)用程序,一個(gè)在 src/test 中,另一個(gè)在 src/main 中。他們有自己獨(dú)立的 app.properties 和獨(dú)立的端口。我想進(jìn)行集成測試,在它運(yùn)行之前,我希望它在 maven 中運(yùn)行集成測試時(shí)啟動(dòng)這兩個(gè)服務(wù)器。到目前為止,使用前后 maven 集成測試插件沒有幫助,我似乎無法在 Spring Boot 中以編程方式啟動(dòng)它們。此外,我已經(jīng)意識(shí)到即使我使用 ActiveProfile 和 spring boot 測試指定集成測試也不會(huì)連接到我的主應(yīng)用程序,它總是會(huì)啟動(dòng)我的測試應(yīng)用程序。我的主要應(yīng)用程序:import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.builder.SpringApplicationBuilder;@SpringBootApplicationpublic class App {    public static void main( String[] args )    {        new SpringApplicationBuilder(App.class)             .build()        .run(args);    }}我的測試應(yīng)用程序:import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.builder.SpringApplicationBuilder;@SpringBootApplicationpublic class MockServerApp {    public static void main(String[] args) {        // TODO Auto-generated method stub        new SpringApplicationBuilder(MockServerApp.class)               .build()        .run(args);    }}我的集成測試import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.context.annotation.PropertySource;import org.springframework.test.context.ActiveProfiles;import org.springframework.test.context.junit4.SpringRunner;import com.nulogix.billing.App;import com.nulogix.billing.mockserver.MockServerApp;@RunWith(SpringRunner.class)@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,classes = {App.class})public class BillingMediatorIT {        @Test        public void testOne(){            }        }我的 App.class 連接到端口 28433,我的 MockServerApp.class 連接到端口 9119。由于某種原因,我的測試仍然連接到 MockServerApp.class,因?yàn)樗褂枚丝?9119。如何解決此問題并使其啟動(dòng)兩個(gè)應(yīng)用程序預(yù)集成測試階段。
查看完整描述

1 回答

?
森欄

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊

問題本身有些事情看起來不對勁,我會(huì)盡力澄清

沒有必要保留兩個(gè) Spring Boot 應(yīng)用程序:一個(gè)src/testsrc\main.?如果你確實(shí)需要使用兩個(gè)不同的微服務(wù)——至少使用兩個(gè) maven 模塊:

??project
??|___?app1
??|??????|__?src/main/java?-?app1?production?code?is?here
??|??????|__?src/test/java?-?app1?tests?are?here
??|??????|__?pom.xml
??|___?app2??????
??|??????|__?src/main/java?-?app2?production?code?is?here
??|??????|__?src/test/java?-?app2?tests?are?here
??|??????|__?pom.xml
??|__?pom.xml

現(xiàn)在 Spring Boot 很好地支持在@SpringBootTest注釋的幫助下運(yùn)行一個(gè)微服務(wù),注釋基本上試圖在測試中模擬 Spring Boot 微服務(wù)的啟動(dòng)(具有配置管理、組件掃描等) 。并且由于 spring 配置緩存功能,您可以在測試用例之間重用相同的應(yīng)用程序上下文。

通常 spring universe 中的集成測試測試一個(gè)特定的微服務(wù),該微服務(wù)能夠模擬出它的一些 bean,這些 bean 可以為外部組件提供集成點(diǎn)。

然而,如果你想運(yùn)行 2 個(gè)應(yīng)用程序,你可能需要一個(gè)完整的“系統(tǒng)測試”,因?yàn)槟銣y試了這些組件之間的交互。這有點(diǎn)超出了 spring 本身的范圍,它存在于一個(gè) JVM 中并服務(wù)于一個(gè)進(jìn)程(應(yīng)用程序)。

因此,假設(shè)每個(gè)測試都是出于明確的特定原因而完成的,首先,問問自己到底想測試什么?

例如,如果您想測試應(yīng)用程序 1 的內(nèi)部邏輯,也許您根本不應(yīng)該啟動(dòng)應(yīng)用程序 2。例如,如果 app1 通過 HTTP/Rest 與 app2 交互,也許你應(yīng)該使用某種模擬服務(wù)器,比如wiremock?或者,在 mockito 中模擬與該服務(wù)器交互的 bean,或者使用 Internal Spring Test 的模擬服務(wù)器來表示一個(gè)例如這里的遠(yuǎn)程應(yīng)用程序

這適用于大多數(shù)情況。

現(xiàn)在,如果您真的需要一個(gè)系統(tǒng)測試來檢查可能涉及許多應(yīng)用程序的“業(yè)務(wù)流程”,請做好準(zhǔn)備,有一天您將不得不創(chuàng)建另一個(gè)應(yīng)用程序,然后測試將變得更加復(fù)雜。也許您應(yīng)該考慮創(chuàng)建一個(gè)包含所有微服務(wù)的測試環(huán)境并從那里運(yùn)行測試套件。然后自動(dòng)化使用一些腳本創(chuàng)建環(huán)境并運(yùn)行此腳本以創(chuàng)建環(huán)境并在其上運(yùn)行測試,然后刪除環(huán)境。您還需要關(guān)心(如果)您擁有的所有數(shù)據(jù)庫、配置管理等。我建議與您工作場所的 Devops 人員討論這個(gè)問題,他們可能會(huì)幫助您解決這個(gè)問題。你也可以和你的 QA 部門談?wù)?,詢問?xiàng)目的自動(dòng)化,這可能是一項(xiàng)非常有趣的任務(wù),通常每個(gè)公司都以自己的方式解決它。

如果您仍然需要從 maven 運(yùn)行它,現(xiàn)在如何組織代碼。

我會(huì)把系統(tǒng)測試放在一個(gè)單獨(dú)的模塊中(因?yàn)樗鼈儗?shí)際上既不屬于 app1 也不屬于 app2):

??project
??|___?app1
??|??????|__?src/main/java?-?app1?production?code?is?here
??|??????|__?src/test/java?-?app1?tests?are?here
??|??????|__?pom.xml
??|___?app2??????
??|??????|__?src/main/java?-?app2?production?code?is?here
??|??????|__?src/test/java?-?app2?tests?are?here
??|??????|__?pom.xml
??|__?test-module
??|???|__pom.xml?//depends?on?app1,?app2
??|???|__?src/test/java?-?all?system?tests?are?here?
??|__?pom.xml

然后使這個(gè)模塊同時(shí)依賴于 app1 和 app2,以便它們首先編譯。然后考慮到當(dāng) Maven 構(gòu)建此模塊時(shí),app1 和 app2 的工件已準(zhǔn)備就緒。

Maven 的默認(rèn)生命周期有一個(gè)階段的概念,它基本上是您想要運(yùn)行插件的掛鉤點(diǎn)。因此,例如,您可以創(chuàng)建一個(gè)腳本來運(yùn)行兩個(gè)應(yīng)用程序(具有配置的端口和所有內(nèi)容),然后分階段運(yùn)行腳本,然后在您必須在測試模塊中pre-integration-test配置的幫助下將所有測試作為集成測試運(yùn)行maven-failsafe-pluginpom 然后在一個(gè)post-integration-test階段運(yùn)行另一個(gè)腳本來停止這兩個(gè)應(yīng)用程序


查看完整回答
反對 回復(fù) 2023-06-14
  • 1 回答
  • 0 關(guān)注
  • 140 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)