日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于事件驱动架构构建微服务第10部分:在docker容器内运行单元测试

發(fā)布時間:2023/12/4 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于事件驱动架构构建微服务第10部分:在docker容器内运行单元测试 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文鏈接:https://logcorner.com/building-microservices-through-event-driven-architecture-part11-run-unit-tests-inside-a-docker-container/

在本教程中,我將展示如何在docker容器中運(yùn)行單元測試。

因為我將使用kubernetes在容器中運(yùn)行微服務(wù),所以單元測試、集成測試、持續(xù)集成和持續(xù)交付將使用docker鏡像和容器來完成。

LogCorner.EduSync.Speech.Domain.UnitTest

讓我們繼續(xù)打開LogCorner.EduSync.Speech.Domain.UnitTest項目并創(chuàng)建一個這樣的docker文件(你可以通過右鍵單擊項目名稱并選擇Docker Support來生成 docker 文件)

Docker文件

Docker文件應(yīng)如下所示:

FROM?mcr.microsoft.com/dotnet/core/sdk:3.1-buster?AS?build

使用 mcr.microsoft.com/dotnet/core/sdk:3.1-buster 作為基礎(chǔ)鏡像

WORKDIR?/src

在docker鏡像中創(chuàng)建/src目錄。

COPY?[“LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain.UnitTest/LogCorner.EduSync.Speech.Domain.UnitTest.csproj”,?“LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain.UnitTest/”] COPY?[“LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain/LogCorner.EduSync.Speech.Domain.csproj”,?“LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain/”]

復(fù)制當(dāng)前文件夾(src)上的LogCorner.EduSync.Speech.Domain.UnitTest.csproj文件和LogCorner.EduSync.Speech.Domain.csproj文件

請注意,應(yīng)復(fù)制引用的.csproj項目文件,以便以后能夠恢復(fù)包。

RUN?dotnet?restore?“LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain.UnitTest/LogCorner.EduSync.Speech.Domain.UnitTest.csproj”:

為Log Corner.EduSync.Speech.Domain.UnitTest項目和引用的項目恢復(fù)包。

COPY?.?.

將所有內(nèi)容(除了.dockerignore文件中包含的文件/目錄)復(fù)制到docker鏡像中的/src目錄。

WORKDIR?“/src/LogCorner.EduSync.Speech/LogCorner.EduSync.Speech.Domain.UnitTest”

將當(dāng)前文件夾更改為LogCorner.EduSync.Speech.Domain.UnitTest 項目。

要對其進(jìn)行測試,請移至\LogCorner.EduSync.Command\src文件夾并運(yùn)行以下命令以使用unite test Docker文件構(gòu)建和創(chuàng)建名為unittest-image的鏡像:

docker?build?-t?unittest-image?-f?LogCorner.EduSync.Speech\LogCorner.EduSync.Speech.Domain.UnitTest\Dockerfile?.

然后,使用unittest-image作為鏡像以交互模式啟動容器

docker?run?-it?unittest-image

最后使用以下命令運(yùn)行單元測試:

dotnet?test?–logger?“trx;LogFileName=UnitTestResultfile.trx”

我可以使用下列命令編輯測試結(jié)果文件

cat?UnitTestResultfile.trx

docker-compose文件

Compose是一個用于定義和運(yùn)行多容器Docker應(yīng)用程序的工具。借助Compose,你可以使用YAML文件來配置應(yīng)用程序的服務(wù)。然后,使用單個命令,從配置中創(chuàng)建并啟動所有服務(wù)。https://docs.docker.com/compose/

所以讓我們創(chuàng)建一個docker-compose-unit-tests文件

docker-compose-unit-tests文件

該文件用于構(gòu)建和運(yùn)行鏡像logcorner-edusync-speech-domain-unit-test,它使用單元測試Dockerfile。

然后創(chuàng)建并啟動鏡像logcorner.edusync.speech.domain.unittest

docker-compose.override-unit-tests文件

這個文件覆蓋了docker-compose-unit-tests文件,所以我添加了一個ASPNETCORE_ENVIRONMENT和一個入口點(diǎn)來運(yùn)行單元測試

構(gòu)建單元測試項目

要構(gòu)建單元測試項目,我可以運(yùn)行以下命令:

docker-compose?-f?docker-compose-unit-tests.yml?-f?docker-compose.override-unit-tests.yml?build

構(gòu)建將創(chuàng)建一個鏡像logcorner-edusync-speech-domain-unit-test:latest。

讓我們使用以下命令以交互模式運(yùn)行鏡像logcorner-edusync-speech-domain-unit-test:latest:

docker?run?–rm?-it?logcorner-edusync-speech-domain-unit-test:latestls?-la

讓我們運(yùn)行單元測試

dotnet?test?–logger?“trx;LogFileName=.\domain-tests\tests-results-domain.xml”

ls?-lacd?TestResultsls?-lacd?domain-testsls

我應(yīng)該在名為tests-results-domain.xml的容器中看到一個文件

我可以使用以下命令編輯tests-results-domain.xml文件。

cat?tests-results-domain.xmlexit

然后如果我再次啟動容器,tests-results-domain.xml文件應(yīng)該消失。

docker?run?–rm?-it?logcorner-edusync-speech-domain-unit-test:latestls?-la

發(fā)布測試結(jié)果

因為當(dāng)容器停止運(yùn)行時測試結(jié)果文件(tests-results-domain.xml)消失了,所以我必須在docker容器和主機(jī)之間共享tests-results-domain.xml文件。

因此,我將在主機(jī)上創(chuàng)建一個文件夾,并將其映射到docker容器內(nèi)包含測試結(jié)果的文件夾。

我必須在docker-compose文件中添加這樣的卷:

volumes:–?./TestResults/tests-results-domain:/domain-tests

并且,我在容器的domain-tests和主機(jī)的tests-results-domain之間創(chuàng)建了一個卷映射。

volumes: –?./tests-results-domain:/domain-tests

運(yùn)行單元測試項目

要運(yùn)行單元測試,我必須運(yùn)行以下命令:

docker-compose?-f?docker-compose-unit-tests.yml?-f?docker-compose.override-unit-tests.yml?up

我應(yīng)該在主機(jī)上創(chuàng)建一個tests-results-domain文件夾,這個文件夾應(yīng)該包含測試結(jié)果。

在我的CI/CD管道中,我將使用主機(jī)上的TestResults文件夾來發(fā)布測試結(jié)果

容器化其他UnitTest項目

為了容器化其他單元測試項目(infrastructure, presentation, application),我遵循與領(lǐng)域單元測試相同的場景

你可以在這里找到整個docker-compose-unit-tests.yml和docker-compose.override-unit-tests.yml文件

要構(gòu)建和運(yùn)行所有單元測試,我必須運(yùn)行以下命令:

docker-compose?-f?docker-compose-unit-tests.yml?-f?docker-compose.override-unit-tests.yml?builddocker-compose?-f?docker-compose-unit-tests.yml?-f?docker-compose.override-unit-tests.yml?up

源代碼可在此處獲得:

https://github.com/logcorner/LogCorner.EduSync.Speech.Command/tree/Task/DockerUnitTesting

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的基于事件驱动架构构建微服务第10部分:在docker容器内运行单元测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。